在我的表单中,我创建了两个面板 panel1 和 panel2 ,在每个面板中我创建了一个名为 button1 的按钮和 button2 分别。 如果我想使用
添加事件处理程序this.button1.Click += buttonEvent;
很好。但是,当我使用foreach为表单中的每个控件时,它没有被检测到。 问题是什么?
public myForm1()
{
InitializeComponent();
foreach (Control c in this.Controls)
{
TextBox tb = c as TextBox;
if (tb != null)
{
tb.TextChanged += textChanged;
}
}
}
如何使用 foreach 访问我的每个面板中的控件?
答案 0 :(得分:1)
您必须遍历panel1
和panel2
而不是myForm1
中的控件。
public myForm1()
{
InitializeComponent();
foreach(Control c in panel1.Controls)
{
TextBox tb = c as TextBox;
if(tb != null)
{
tb.TextChanged += textChanged;
}
}
}
修改强>
从表格中获取面板:
for(int i = 0; i < 2; i++)
{
Panel p = this.Controls["panel" + i];
foreach(Control c in p.Controls)
{
TextBox tb = c as TextBox;
if(tb != null)
{
tb.TextChanged += textChanged;
}
}
}
答案 1 :(得分:1)
在您的表单中,Controls Collection只获得了面板。因为面板是一个Container(作为Form),它有自己的Controls Collection。因此,您必须递归迭代才能获得所有子控件。因此,如果检测到新的IContainerControl,如panel或usercontrol等,您也可以检查它们。
在您的情况下,面板控件集合将包含按钮。
例如,此方法应搜索项目:
容器应该是您的表格。
private Control SearchControl(IContainerControl container, string name)
{
foreach (Control control in this.Controls)
{
if (control.Name.Equals(name))
{
return control;
}
if (control is IContainerControl)
{
return SearchControl(control as IContainerControl, name);
}
}
return null;
}