我想列出名称以“btnOverlay”开头的另一个控件中的所有控件。我无法使用Controls.Find
,因为它需要完全匹配。我相信我可以使用LINQ,但我对此并不是很有经验。可能吗?我该怎么办?
我正在使用.NET 4.0。
答案 0 :(得分:6)
您可以使用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 :(得分:1)
这是一种不使用LINQ的替代方案:
foreach (Control c in this.Controls)
{
if (c.Name.StartsWith("btnOverlay"))
{
// Do something
}
}
可以使用您想要使用的控件重命名this.
。