仅从 winform 中获取 groupBoxes

Get only the groupBoxes from a winform

我编写了这段代码,用于从 winform 中获取所有组框,然后只获取具有确定名称的组框。

Control.ControlCollection controles = this.Controls;   
GroupBox gBoxAux = new GroupBox();             
List<GroupBox> gBoxes = new List<GroupBox>();

foreach (Control c in controles)
{                                        
   if (c.GetType() == typeof(GroupBox))
   {
       gBoxAux = (GroupBox)c;
       gBoxes.Add(gBoxAux);                        
   }
}

我不知道是否有更好的方法来代替遍历所有控件。

非常感谢!

要找到所有组框,没有比遍历所有组框更好的方法了。但是(对我来说)代码看起来会更好:

List<GroupBox> gBoxes = this.Controls.OfType<GroupbBox>().ToList();

OfType<T> 选择序列中该类型的所有元素。

请注意,这只会找到直接包含在此 ControlCollection 中但不包含在子容器中的所有组框。您可能希望递归地收集组框:

public IEnumerable<GroupBoxes> GetAllGroupBoxes(Control c)
{
    return c.Controls.OfType<GroupBox>()
                     .Concat(c.Controls.OfType<Control>().SelectMany(GetAllGroupBoxes));
}

List<GroupBox> gBoxes = GetAllGroupBoxes(this).ToList();

要过滤特定名称,您可以使用 Where:

Controls.OfType<GroupBox>().Where(gb => gb.Name == "whatever")...

您可以使用 Linq 查询:

this.Controls.OfType<GroupbBox>().Where(x=> x.Name == "SomeName").ToList();