使用模式按名称查找Windows窗体控件

时间:2012-08-16 17:29:52

标签: .net winforms linq

我想列出名称以“btnOverlay”开头的另一个控件中的所有控件。我无法使用Controls.Find,因为它需要完全匹配。我相信我可以使用LINQ,但我对此并不是很有经验。可能吗?我该怎么办?

我正在使用.NET 4.0。

2 个答案:

答案 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.