以c#形式收集控件
本文关键字:控件 | 更新日期: 2023-09-27 18:30:10
我有一个表单,其中有一些按钮。我想把它们的引用放在一个数组中。前臂有可能吗?
我想这样做:
public Form1()
{
InitializeComponent();
Button[] all = new Button[5];
all[0] = button1;
all[1] = button2;
all[3] = button3;
all[4] = button4;
}
我已经试过了
int i=0;
foreach (Button p in Form1)
{
all[i]= p;
i++;
}
但我不能在Form上使用前臂。如果按钮在面板中也是一样的。
如何快速收集所有按钮?感谢:)
您正在寻找表单或容器的Controls
集合,它直接包含其中的每个控件。
注意,这也将包括非按钮;调用CCD_ 2进行过滤。
因此,您可以初始化一个数组,而不是foreach:
Button[] all = this.Controls.OfType<Button>().ToArray();
每个Control
都有一个Controls
属性,该属性是ControlCollection
。您可以在Control
(作为Form
或Panel
)上获得所有Button
,如下所示:
foreach(var button in control.Controls.OfType<Button>())
{ ... }
但这只会给您直接包含在该control
中的Button
。如果您想在allPanel
s、GroupBox
s等上的Form
中获得所有Button
s,则需要像本例中那样通过Controls
递归:
public class Form1 : Form
{
// ...
private static IEnumerable<Button> GetAllButtons(Control control)
{
return control.Controls.OfType<Button>().Concat(control.Controls.OfType<Control>().SelectMany(GetAllButtons));
}
private void DoSomethingWithAllButtons()
{
foreach(var button in GetAllButtons(this))
{ // do something with button }
}
}