循环遍历控件无法找到文本框控件

本文关键字:控件 文本 遍历 循环 | 更新日期: 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++;
        }
}