仅从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);
}
}
我不知道是否有更好的方法来代替迭代所有的控件。
非常感谢!
您可以使用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")...