Как проверить несколько текстовых полей, если они пустые или пустые, без уникального теста для каждого? - PullRequest
8 голосов
/ 06 января 2012

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

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

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

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

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();
        }

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

Ответы [ 2 ]

25 голосов
/ 06 января 2012

Конечно - перечислите через ваши элементы управления поиск текстовых полей:

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.
        }
    }
}
10 голосов
/ 06 января 2012

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

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