2

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

我正在使用.NET 4.0。

4

2 回答 2

6

您可以通过以下方式使用 LINQ 搜索它们:

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

Cast<T>调用是必需的,因为没有ControlCollection实现IEnumerable<T>,只有IEnumerable. 此外,这不会进行递归搜索,而只会直接搜索包含的控件。如果需要递归,您可能需要将其重构为类似于此答案的方法

于 2012-08-16T17:32:45.617 回答
1

这是不使用 LINQ 的替代方法:

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

随意this.使用您要使用的控件重命名。

于 2012-08-16T21:23:55.843 回答