2015-08-25 40 views
3

MSDN文檔System.Windows.Forms.Control.Controls屬性(例如,here)規定:Control.Controls屬性是否返回遞歸嵌套控件?

使用的控件屬性來通過一個形式的所有控制,包括嵌套控制迭代。

對於「嵌套控件」在這裏的正確含義,我不知所措。
爲了說明問題,我提出一種形式,由以下組成:

  • 按鈕
  • 列表框
  • 內部具有按鈕組框。

代碼

MessageBox.Show(Controls.Count.ToString()); 

產生基於我的文檔的理解,答案3,我假定這將提供4代替(計數組框裏面的按鈕)。 如果groupbox被面板替換,則會觀察到相同的行爲。

上述有關嵌套控件的說法實際上是什麼意思?

+1

好問題。也很高興看到實際閱讀文檔的罕見人士。 –

回答

2

Control.Controls是該控件的一個集合立即孩子。因此,表單的控件集合將有3個控件。而你的GroupBox的控件集合將有1個控件(按鈕)。

我不太確定文檔中的評論是什麼,除了可能(儘管不太明白)暗示您可以遞歸地使用此屬性來獲取所有嵌套控件。例如:

static IEnumerable<Control> GetAllDescendantControls(this Control c) 
{ 
    return c.Controls.Cast<Control>() 
     .Concat(c.Controls.SelectMany(x => x.GetAllDescendantControls())); 
} 
+0

小通知:我只能讓你的例子使用'c.Controls.Cast '而不是簡單的'c.Controls',ControlCollection本身不能轉換爲IEnumerable alexdelphi

+0

@alexdelphi啊是的,你可能不得不去做。其中一些WinForms集合只有IEnumerable。感謝您的評論 –