我想列出名稱以「btnOverlay」開頭的另一個控件內的所有控件。我無法使用Controls.Find
,因爲它需要完全匹配。我相信我可以使用LINQ來做這件事,但我並不是很有經驗。可能嗎?我該怎麼做?使用模式按名稱查找Windows窗體控件
我正在使用.NET 4.0。
我想列出名稱以「btnOverlay」開頭的另一個控件內的所有控件。我無法使用Controls.Find
,因爲它需要完全匹配。我相信我可以使用LINQ來做這件事,但我並不是很有經驗。可能嗎?我該怎麼做?使用模式按名稱查找Windows窗體控件
我正在使用.NET 4.0。
你可以通過使用LINQ尋找他們:
var matches = control.Controls.Cast<Control>()
.Where(c => c.Name.StartsWith("btnOverlay"));
的Cast<T>
調用是必需的,因爲ControlCollection
沒有實現IEnumerable<T>
,只有IEnumerable
。此外,這不會執行遞歸搜索,而只是直接搜索包含的控件。如果需要遞歸,您可能需要將其重構爲method similar to this answer。
這裏是不使用LINQ的選擇:
foreach (Control c in this.Controls)
{
if (c.Name.StartsWith("btnOverlay"))
{
// Do something
}
}
隨時與您要使用的控制重命名this.
。
+1,對於3.5之前的.NET來說,這是一個很好的選擇。 – 2012-08-17 13:01:59