vacia - validar maskedtextbox vacio c#
¿Cómo puedo verificar múltiples cuadros de texto si nulo o vacío sin una prueba única para cada uno? (2)
Claro, enumere a través de sus controles buscando cuadros de texto:
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
TextBox textBox = c as TextBox;
if (textBox.Text == string.Empty)
{
// Text box is empty.
// You COULD store information about this textbox is it''s tag.
}
}
}
Tengo alrededor de 20 campos de texto en un formulario que un usuario puede completar. Quiero solicitar al usuario que considere guardar si tienen algo escrito en cualquiera de los cuadros de texto. En este momento la prueba para eso es realmente larga y desordenada:
if(string.IsNullOrEmpty(txtbxAfterPic.Text) || string.IsNullOrEmpty(txtbxBeforePic.Text) ||
string.IsNullOrEmpty(splitContainer1.Panel2) ||...//many more tests
¿Hay alguna manera de que yo pueda usar algo como una matriz de cualquiera, donde la matriz está compuesta de cuadros de texto y lo controlo de esa manera? ¿De qué otras maneras podría ser una forma muy conveniente de ver si se han realizado cambios desde que se inició el programa?
Otra cosa que debería mencionar es que hay un selector de fecha y hora. No sé si tengo que probar eso porque el datetimepicker nunca será nulo o vacío.
EDITAR: Incorporé las respuestas en mi programa, pero parece que no puedo hacerlo funcionar correctamente. Configuré las pruebas de la siguiente manera y continúo activando la llamada Application.Exit ().
//it starts out saying everything is empty
bool allfieldsempty = true;
foreach(Control c in this.Controls)
{
//checks if its a textbox, and if it is, is it null or empty
if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text)))
{
//this means soemthing was in a box
allfieldsempty = false;
break;
}
}
if (allfieldsempty == false)
{
MessageBox.Show("Consider saving.");
}
else //this means nothings new in the form so we can close it
{
Application.Exit();
}
¿Por qué no encuentra ningún texto en mis cuadros de texto basado en el código anterior?
Basándose en la respuesta de George, pero haciendo uso de algunos prácticos métodos LINQ:
if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text)))
{
//Your textbox is empty
}