2014-04-03 37 views
1

我正在編寫代碼來遍歷表單上的所有控件。這看起來很簡單,但Form.Controls集合不包含其他控件包含的控件。如何確定控件是否爲其他控件的容器

好吧,所以我試着測試一下,看看是否每個ctl is ContainerControl,如果是的話,遞歸迭代通過容器控件中的控件。

好吧,但事實證明GroupBox控制不來自ContainerControl。它直接來自Control

是否有任何通用的方式來確定我的代碼是否包含其他控件?我認爲會有一個基本類型或接口可以做到這一點,但似乎並非如此。

回答

2

可以使用Control.HasChildren屬性:

如果此控制有其集合中的子控件。

if (ctl.HasChildren) 
{ 
    // true, if ctl has controls in it 
} 
+0

啊,你是對的。事實上,我看到所有的控件都有一個'Controls'集合屬性。反思這一點。謝謝。 –

+0

這有點不可思議......我想可以將'TextBox'添加到'Label',但我從來沒有理由在'WinForms'中做這樣的事情。 –

0
List<Control> AllFormsControl = new List<Control>(); 
    public void InitContolList(Control nControl) 
    { 
     if (nControl.Controls.Count > 0) 
     { 
      foreach (Control item in nControl.Controls) 
      { 
       InitContolList(item); 
       AllFormsControl.Add(item); 
      } 

     } 
     // Optional 
     //AllFormsControl.Add(nControl); 
    } 

然後你可能會遇到:

InitControlList(this); 

好運。

相關問題