2012-01-05 5 views
8

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 de que es muy largo y desordenado:¿Cómo puedo verificar múltiples cuadros de texto si nulo o vacío sin una prueba única para cada uno?

if(string.IsNullOrEmpty(txtbxAfterPic.Text) || string.IsNullOrEmpty(txtbxBeforePic.Text) || 
      string.IsNullOrEmpty(splitContainer1.Panel2) ||...//many more tests 

¿Hay una manera que podría utilizar algo así como una gran variedad de los hubiere, en la matriz se hace de los cuadros de texto y puedo comprobar que 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 debo 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.

EDIT: Incorporé las respuestas a 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?

Respuesta

22

Claro - enumerar sus controles en busca de 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. 
     } 
    } 
} 
9

Sobre la base de la respuesta de George, pero haciendo uso de algunos métodos prácticos de LINQ:

if(this.Controls.OfType<TextBox>().Any(t => string.IsNullOrEmpty(t.Text))) 
{ 
//Your textbox is empty 
} 
+1

Nota al pie: Una norma OUT- el control TextBox de la caja nunca devolverá un valor nulo en su propiedad de texto. Buen uso de LINQ! +1 –

+1

Su respuesta es mejor, ya que lanzaría el cuadro de mensaje una sola vez. La instrucción 'Foreach' arrojará MessgeBox.Show ("Ingrese toda la información") varias veces. –

Cuestiones relacionadas