0

好的,这是我的问题:我有一个带有 10 个用户控件的表单(它们都是相同的),它们每个都包含 1 个文本框、1 个组合框和 5 个复选框。

默认情况下,一切都被禁用,但使用另一个复选框,用户将启用文本框或组合框或所有 5 个复选框。

我可以通过做类似的事情轻松做到这一点

    ucPlayer1.name.Enabled = true;
    ucPlayer2.name.Enabled = true;

等等..但似乎没有必要

在我没有使用任何用户控件之前,我可以执行以下操作:

    foreach (Control c in this.Controls)
    {
        if (c is TextBox && c != null)
           ((TextBox)c).Enabled = true;
    }

但是现在,我被卡住了,我无法获得工作循环,我尝试了类似的方法:

    foreach(UserControl uc in Controls)

但它不起作用。

有任何想法吗 ??

4

1 回答 1

1

尝试这样的事情。如果是用户控件,则递归调用相同的方法。

private void DoItRecursive(Control parent)
{
    foreach (Control c in parent.Controls)
    {
        if(c is UserControl)
            DoItRecursive(c);
        else if (c is TextBox)
            c.Enabled = true;
    }
}

然后像这样使用它

DoItRecursive(this);

this通常指哪里Form

注意:我已经 c != null从您的代码中删除了检查,因为is关键字会处理这个问题。你不需要,并且强制c转换TextBox是多余的。

于 2013-11-08T10:41:07.857 回答