好的,这就是我的问题:我有一个包含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)
但它不起作用。
任何想法??
答案 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
是多余的。