循环遍历控件无法找到文本框控件
本文关键字:控件 文本 遍历 循环 | 更新日期: 2023-09-27 17:50:34
你能解释一下为什么这不起作用吗?
int count = 0;
foreach (Control c in this.Controls)
{
if (c is TextBox)
{
TextBox textBox = c as TextBox;
if (textBox.BackColor == Color.Green)
{
count++;
}
}
}
if (count == 40)
{
SchemaForm ff = new SchemaForm();
ff.Show();
this.Hide();
}
}
这是一个测试,所有的数据检查后,我需要重定向学生到另一个页面。所以,我必须检查,如果所有的文本框都是绿色的。如果它们都是BackColor,那么我们继续到另一个页面。
代码是正确的。可能有任何TextBox
缺失,没有Green
的颜色,或者可能是你计算错误。
正如你所解释的,所有TextBoxes
都包含在GroupBoxes
中,所以你必须遍历所有groupBoxes
。
bool IsAllGreen = true;
foreach (GroupBox groupBox in this.Controls.OfType<GroupBox>()) //get all GroupBoxes
{
foreach (TextBox textBox in groupBox.Controls.OfType<TextBox>()) //Get all Textboxes for every GroupBox
{
if (textBox.BackColor != Color.Green) //if any textbox is not Green, it will not go further
{
IsAllGreen = false;
break;
}
}
}
if (IsAllGreen)
{
SchemaForm ff = new SchemaForm();
ff.Show();
this.Hide();
}
我认为问题出在if语句中:
if (c is TextBox)
{
TextBox textBox = c as TextBox;
if (textBox.BackColor == Color.Green)
{
count++;
}
}
你可能想检查它的类型,所以正确的是:
if (typeof(TextBox) == c.GetType()) {
TextBox textBox = c as TextBox;
if (textBox.BackColor == Color.Green)
{
count++;
}
}