Вы можете запросить коллекцию элементов управления формы (или соответствующего контейнера) и отфильтровать текстовые поля и выполнить дальнейший запрос, чтобы увидеть, являются ли какие-либо из них пустыми (ни один из них не должен действительно иметь нулевые значения).Пример:
var emptyTextboxes = from tb in this.Controls.OfType<TextBox>()
where string.IsNullOrEmpty(tb.Text)
select tb;
if (emptyTextboxes.Any())
{
// one or more textboxes are empty
}
Вы можете эффективно сделать то же самое, используя свободный синтаксис.
bool isIncomplete = this.Controls.OfType<TextBox>().Any(tb => string.IsNullOrEmpty(tb.Text));
if (isIncomplete)
{
// do your work
}
Для этого кода вы должны работать как минимум с Visual Studio 2008 / C # 3 /.NET 3.5.В вашем проекте должна быть ссылка на System.Core.dll (по умолчанию она должна быть), а в файле класса вам нужна директива using System.Linq;
.
На основании ваших комментариев рассмотрим другой методесли у вас возникли проблемы с пониманием или работой с версией linq.Конечно, вы можете сделать это в явном цикле (в конечном счете, код Linq также будет циклом).Рассмотрим
bool isIncomplete = false;
foreach (Control control in this.Controls)
{
if (control is TextBox)
{
TextBox tb = control as TextBox;
if (string.IsNullOrEmpty(tb.Text))
{
isIncomplete = true;
break;
}
}
}
if (isIncomplete)
{
}
Наконец, этот код написан так, как будто все текстовые поля находятся в одном контейнере.Этот контейнер может быть формой, панелью и т. Д. Вам нужно будет указать на соответствующий контейнер (например, вместо this
(форма) это может быть this.SomePanel
).Если вы работаете с элементами управления, которые находятся в нескольких и, возможно, вложенных контейнерах, вам потребуется проделать дополнительную работу, чтобы найти их программно (рекурсивный поиск, явное объединение и т. Д.), Или вы можете просто предварительно загрузить ссылки в массив или другую коллекцию.Например,
var textboxes = new [] { textbox1, textbox2, textbox3, /* etc */ };
// write query against textboxes instead of this.Controls
Вы сказали, что у вас есть несколько элементов управления GroupBox.Если каждый GroupBox загружен в форму и не вложен в другой элемент управления, это может помочь вам начать работу.
var emptyTextboxes = from groupBox in this.Controls.OfType<GroupBox>()
from tb in groupBox.Controls.OfType<TextBox>()
where string.IsNullOrEmpty(tb.Text)
select tb;