2011-05-07 35 views
2

我想通过form.tab中的所有复选框,并将它们标记为未选中。我发现这是正确的决定:迭代C#中的复选框控件#

 foreach (Control c in this.Controls) 
    { 
     CheckBox cb = c as CheckBox; 
     if (cb! = null & & cb.Checked) 
     { 
      cb.Checked = false; 
     } 
    } 

但它不工作!我不明白为什么。我看了调试器,并且cbnull。为什么会这样呢?我哪里做错了?

+0

也许你的复选框不是在窗体中,而是在其他容器中? – Serghei 2011-05-07 11:15:09

+0

否:(Main_form.j1checkbox1 ... – Mobyman 2011-05-07 11:23:48

回答

1

尝试更改第一行:

this.Controls 

this.tab.Controls 

您当前的代码正在通过表单上的控件直接循环。您需要遍历选项卡上的控件。

+0

非常感谢!非常愚蠢的错误:( – Mobyman 2011-05-07 11:34:32

2

可能CheckBoxes包含在某个容器中,因此您必须执行一些递归查找或直接在该容器的集合上进行迭代。

0

我觉得复选框控件是不是在形式也许他们像组框或小组其他容器

2
private void FindControls(Control Page) 
{ 
    foreach (Control ctrl in this.Controls) 
    { 
      if (ctrl is CheckBox) 
      { 
       if (cb! = null & & cb.Checked) 
       {     
        cb.Checked = false;     
       } 
      } 
      else 
      { 
       if (ctrl.Controls.Count > 0) 
       { 
        FindControls(ctrl); 
       } 
      } 
    } 
}