我想列出名称以“btnOverlay”开头的另一个控件中的所有控件。我不能使用Controls.Find
,因为它需要完全匹配。我相信我可以为此使用 LINQ,但我对此不是很有经验。是否可以?我该怎么做?
我正在使用.NET 4.0。
您可以通过以下方式使用 LINQ 搜索它们:
var matches = control.Controls.Cast<Control>()
.Where(c => c.Name.StartsWith("btnOverlay"));
Cast<T>
调用是必需的,因为没有ControlCollection
实现IEnumerable<T>
,只有IEnumerable
. 此外,这不会进行递归搜索,而只会直接搜索包含的控件。如果需要递归,您可能需要将其重构为类似于此答案的方法。
这是不使用 LINQ 的替代方法:
foreach (Control c in this.Controls)
{
if (c.Name.StartsWith("btnOverlay"))
{
// Do something
}
}
随意this.
使用您要使用的控件重命名。