我对C#上的事件处理有疑问:
我有5个面板,我想点击每个名称属性。
我在Form1_Click()上尝试了以下内容:
private void Form1_Click(object sender, EventArgs e)
{
Panel panelClicked = sender as Panel;
if (panelClicked != null)
{
MessageBox.Show(panelClicked.Name);
}
}
这不适用于Panel Elements吗? 这对我来说并不适合。有什么想法吗?
答案 0 :(得分:1)
您必须将eventhandler添加到每个面板而不是表单。 你只需这样做:
panel1.Click += Form1_Click;
panel2.Click += Form1_Click;
panel3.Click += Form1_Click;
panel4.Click += Form1_Click;
panel5.Click += Form1_Click;
你很高兴。 您可能希望重命名eventhandler并删除表单本身的单击处理程序。但我希望你明白这个主意。 我在这里编写了事件处理程序,但它也适用于设计师。这个想法是完全相同的,因为签名匹配你可以使用相同的事件处理程序进行多个控件。
如果您不喜欢上述内容,可能会有如下变化:
foreach(Control childControl in control.Controls)
{
if (childControl is Panel) childControl.Click += Form1_Click;
}