仅从winform获取组框

本文关键字:获取 winform 仅从 | 更新日期: 2023-09-27 18:04:47

我编写了这段代码,用于从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);                        
   }
}

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

非常感谢!

仅从winform获取组框

您可以使用Linq:

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

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

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")...