在C#的不同面板中使用相同名称的控件
在我的表单中,我创建了两个面板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访问我的每个面板中的控件?
在你的表格中,控件集合只有面板。 因为面板是一个Container(作为Form),所以它有自己的Controls集合。 所以你必须迭代递归获取所有的子控件。 因此,如果检测到新的IContainerControl,如面板或用户控件等,您也可以检查它们。
在你的情况下,控制集合面板将包含按钮。
例如,这种方法应该搜索一个项目:
容器应该是你的形式。
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;
}
您必须迭代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;
}
}
}
链接地址: http://www.djcxy.com/p/61571.html