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