【问题标题】:Looping Through Controls Doesn't Find TextBox Controls循环遍历控件找不到文本框控件
【发布时间】:2015-05-25 05:23:50
【问题描述】:

您能解释一下为什么这不起作用吗?

    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,如果它们都是,那么我们继续到另一个页面。

【问题讨论】:

  • 您遇到什么错误/异常?
  • 它可以编译吗?还是逻辑错误?
  • 您是否尝试调试this.Controls
  • 不,它不会给出错误,它只是不计算任何东西,count = 0。
  • 请学习使用调试器。单步执行代码,您会很快找出问题所在。

标签: c# winforms controls


【解决方案1】:

您的代码是正确的。可能有没有 Green 颜色的 TextBox 缺失,或者您计算错误。

编辑:

正如您所解释的,所有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();
}

【讨论】:

  • 我已经测试了代码,它工作正常。您确定要更改 textBox 背景色,而不是字体颜色吗?
  • if (tbUlesanneKoormusKiirendus.Text == variant.kiirenduskoormus) { tbUlesanneKoormusKiirendus.BackColor = Color.Green; } else { tbUlesanneKoormusKiirendus.BackColor = Color.Red; }
  • 这就是之前检查 btn 后的变化
  • 是否有panelgroup boxtab page 包含其中的文本框?
  • 是的...我现在明白了,它没有在组框内看到文本框...你能解释一下如何让它在里面看到吗?
【解决方案2】:

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

        }
}

【讨论】:

  • 您尝试调试了吗?是否进入if语句?也许问题出在第二个 if 上。
  • 是的,我现在明白了。它是组框和里面的所有texboxes...有可能让它进去吗?
  • 确实如此。您需要检查 type 是否为 GroupBox instaeed of Textbox ,然后如果为 true,请检查 TextBoxes 是否为现在。只需进行另一次检查。 (或更好的递归检查)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-11-20
  • 2011-06-19
  • 2011-08-10
  • 2013-10-04
相关资源
最近更新 更多