У меня есть около 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();
}
Почему он не находит текст в текстовых полях на основе кода выше?
Боковая примечание: стандартный OUT- элемент управления TextBox никогда не вернет нулевое значение в его текстовом свойстве. Приятное использование LINQ, хотя! +1 –
Ваш ответ лучше, поскольку он будет бросать окно сообщения только один раз. Заявление «Foreach» будет вызывать MessgeBox.Show («Пожалуйста, введите всю информацию») несколько раз. –