2012-08-16 61 views
2

我想列出名稱以「btnOverlay」開頭的另一個控件內的所有控件。我無法使用Controls.Find,因爲它需要完全匹配。我相信我可以使用LINQ來做這件事,但我並不是很有經驗。可能嗎?我該怎麼做?使用模式按名稱查找Windows窗體控件

我正在使用.NET 4.0。

回答

5

你可以通過使用LINQ尋找他們:

var matches = control.Controls.Cast<Control>() 
        .Where(c => c.Name.StartsWith("btnOverlay")); 

Cast<T>調用是必需的,因爲ControlCollection沒有實現IEnumerable<T>,只有IEnumerable。此外,這不會執行遞歸搜索,而只是直接搜索包含的控件。如果需要遞歸,您可能需要將其重構爲method similar to this answer

1

這裏是不使用LINQ的選擇:

foreach (Control c in this.Controls) 
{ 
    if (c.Name.StartsWith("btnOverlay")) 
    { 
     // Do something 
    } 
} 

隨時與您要使用的控制重命名this.

+1

+1,對於3.5之前的.NET來說,這是一個很好的選擇。 – 2012-08-17 13:01:59