【发布时间】:2015-10-21 18:23:25
【问题描述】:
在我的表单中,我创建了两个面板 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 访问每个面板中的控件?
【问题讨论】:
-
你需要递归查找子控件...我更喜欢使用Generic All controls method
-
这对我来说看起来很复杂。我是 Windows 窗体的新手。如果我可以在构造函数中访问“this.control_name”,那么为什么不能在“this.Controls”中访问?
-
因为文本框不属于表单,所以属于面板。
-
那怎么可能通过'this.button1'而不是'this.panel1.button1'来访问呢? (这部分我很困惑)
-
@NaveenKumarV 您的表单是主要对象。这包含 button1 的变量,因此您可以访问它。但是 ControlsCollection 仅包含直接放置在表单上的所有控件。如果您使用面板,这是一个 IContainerControl。这意味着它可以在其中包含其他控件(例如表单本身)。所以这个面板有它自己的 ControlCollection 以及所有放置在面板上的控件等等。仅仅因为 button1 变量在表单上可用,这并不意味着它被添加到 ControlsCollection。