循环控件不能查找TextBox控件

时间:2015-05-25 05:23:51

标签: c# winforms controls

请你解释为什么这不起作用?

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

}

这是一项测试,在检查完所有数据后,我需要将学生重定向到另一页。所以,我必须检查,如果所有文本框都有green.BackColor,如果所有文本框都是,那么我们继续进入另一个页面。

2 个答案:

答案 0 :(得分:1)

您的代码是正确的。可能有任何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();
}

答案 1 :(得分:0)

我认为问题在于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++;

        }
}