2011-05-07 66 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); 
       } 
      } 
    } 
}