2012-01-05 2 views
8

У меня есть около 20 текстовых полей в форме, которую пользователь может заполнить. Я хочу предложить пользователю рассмотреть возможность сохранения, если у них есть что-либо, введенное в любое текстовое поле. Сейчас тест на то, что действительно долго и неаккуратно:Как проверить несколько текстовых полей, если они являются пустыми или пустыми, без уникального теста для каждого?

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

Есть ли способ, которым я мог бы использовать что-то вроде массива любого, где массив из текстовых полей, и я проверить его таким образом? Какие другие способы могут быть очень удобным способом увидеть, были ли сделаны какие-либо изменения с момента запуска программы?

Еще одна вещь, которую я должен упомянуть, - это выбор времени. Я не знаю, нужно ли мне проверять это, поскольку datetimepicker никогда не будет пустым или пустым.

EDIT: Я включил ответы в свою программу, но я не могу заставить их работать правильно. Я установил тесты, как показано ниже, и продолжаю запускать вызов 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(); 
     } 

Почему он не находит текст в текстовых полях на основе кода выше?

ответ

22

Конечно - перечислить через ваши управления ищет текстовые поля:

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

Опираясь на ответ Джорджа, но делает использование некоторых удобных методов LINQ:

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

Боковая примечание: стандартный OUT- элемент управления TextBox никогда не вернет нулевое значение в его текстовом свойстве. Приятное использование LINQ, хотя! +1 –

+1

Ваш ответ лучше, поскольку он будет бросать окно сообщения только один раз. Заявление «Foreach» будет вызывать MessgeBox.Show («Пожалуйста, введите всю информацию») несколько раз. –

Смежные вопросы