在c#中循环访问不同控件用户内的控件

时间:2013-11-08 10:37:43

标签: c# loops user-controls foreach controls

好的,这就是我的问题:我有一个包含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)

但它不起作用。

任何想法??

1 个答案:

答案 0 :(得分:1)

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

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是多余的。