private void btnSaveInformation_Click(object sender, EventArgs e)
{
foreach (Control child in Controls)
{
if (child is TextBox)
{
TextBox tb = child as TextBox;
if (string.IsNullOrEmpty(tb.Text))
{
tb.Text = @"N/A";
}
}
}
//var bal = new StudentBal
//{
// FirstName = txtFirstName.Text
//};
//bal.InsertStudent(bal);
}
我想要实现的是系统检查是否有空白复选框,表格中有很多,如果是空白,则指定值为“N / A”。我对codeI的错误是什么?谢谢。
答案 0 :(得分:2)
文本框是放在面板还是其他分组控件中?如果是这样,表单的Controls集合将不包含对它们的引用;他们只会包含直接的孩子(可能是小组等)
如果它们包含在组控件或面板中,您可能希望执行以下操作:
foreach (Control child in myGroupPanel.Controls)
{
if (child is TextBox) { // your additional code here }
}
如果您想要一个更健壮的方法,下面显示了获取所有控件列表的不同方法:
How to get all children of a parent control?
How to get ALL child controls of a Windows Forms form of a specific type (Button/Textbox)?
答案 1 :(得分:0)
您可以在迭代控件组时使用child.GetType()
来获取控件的类型,然后将其与typeof(TextBox)
进行比较,以帮助您从控件集合中过滤textBoxes。试试这个:
foreach (Control child in Controls)
{
if (child.GetType() == typeof(TextBox))
{
TextBox tb = (TextBox)child;
if (string.IsNullOrEmpty(tb.Text))
{
tb.Text = @"N/A";
}
}
}
否则你可以使用迭代通过过滤集合,如下所示(假设Controls
是一组控件):
foreach (Control child in Controls.OfType<TextBox>().ToList())
{
TextBox tb = (TextBox)child;
if (string.IsNullOrEmpty(tb.Text))
{
tb.Text = @"N/A";
}
}
答案 2 :(得分:0)
我的代码中没有任何错误。我怀疑你正在寻找的控件是嵌套控件。
我建议将层次结构展平并获取所有(嵌套)控件,然后查找特定类型。
static Func<Control, IEnumerable<Control>> GetControls =
(control) => control
.Controls
.Cast<Control>().SelectMany(x => GetControls(x))
.Concat(control.Controls.Cast<Control>());
现在您可以在代码中使用上面的委托,如下所示。
foreach (TextBox tb in GetControls(this).OfType<TextBox>())
{
if (string.IsNullOrEmpty(tb.Text))
{
tb.Text = @"N/A";
}
}