簡體   English   中英

Control.Controls屬性是否以遞歸方式返回嵌套控件?

[英]Does Control.Controls property return recursively nested controls?

System.Windows.Forms.Control.Controls屬性的MSDN文檔(例如, 此處 )指出:

使用Controls屬性迭代窗體的所有控件, 包括嵌套控件

我不知道“嵌套控件”在這里的含義是什么。
為了說明問題,我做了一個表格,包括:

  • 一個按鈕
  • 一個ListBox
  • 一個內部有按鈕的組合框。

編碼

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

得出答案3.根據我對文檔的理解,我假設它將提供4(計算組框內的按鈕)。 如果組框由面板替換,則會觀察到相同的行為。

關於嵌套控件的上述短語實際上意味着什么?

Control.Controls是該控件的直接子項的集合。 因此,您的表單的Controls集合將具有3個控件。 而你的GroupBox的Controls系列將有1個控件(按鈕)。

我不太確定文檔中的注釋是什么,除了(盡管不是那么雄辯)暗示你可以遞歸地使用這個屬性來獲取所有嵌套控件。 例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM