从winform只获取groupBoxes

时间:2016-08-31 08:22:51

标签: c# winforms controls groupbox

我创建了这个代码,用于获取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);                        
   }
}

我不知道是否有更好的方法,而不是遍历所有控件。

非常感谢!

2 个答案:

答案 0 :(得分:1)

很好地找到所有的groupbox,没有比迭代所有groupbox更好的方法了。但是(对我而言)代码看起来会更好:

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

答案 1 :(得分:1)

您可以使用Linq查询:

driver.find_element_by_id()