2015-03-13 68 views
0

我有一个关于事件处理在C#中的问题:获取元素名称与Click事件处理程序上面板

我有5个小组,我想获得每个name属性上点击。

我曾尝试在Form1_Click下列():

private void Form1_Click(object sender, EventArgs e) 
{ 
    Panel panelClicked = sender as Panel; 

    if (panelClicked != null) 
    { 
     MessageBox.Show(panelClicked.Name); 
    } 
} 

这是不是工作屏元件? 它不适合我。任何想法?

+0

这可能是WPF中,的WinForms或WebForms的代码(所有有'Panel'控制)。你在用哪个? – Richard 2015-03-13 14:35:02

+0

WinForms。没有WPF,也没有WebForms。 – DehWeh 2015-03-13 14:35:59

回答

1

您必须将eventhandler添加到每个面板而不是表单。 你只需这样做:

panel1.Click += Form1_Click; 
panel2.Click += Form1_Click; 
panel3.Click += Form1_Click; 
panel4.Click += Form1_Click; 
panel5.Click += Form1_Click; 

和你很好去。 您可能想要重命名事件处理程序并删除窗体本身的点击处理程序。但我希望你明白这一点。 我编写了附在这里的事件处理程序,但它也通过设计器工作。这个想法完全一样,因为签名匹配你可以使用相同的事件处理程序来控制多个控件。

如果你不喜欢上面有变化,像这样:

foreach(Control childControl in control.Controls) 
{ 
    if (childControl is Panel) childControl.Click += Form1_Click; 
} 
+0

这就是我想要避免的。我有60个需要点击的面板。这对每个小组都是一个真正的痛苦。任何选择? – DehWeh 2015-03-13 14:39:10

+2

你可以遍历父控件的子节点,并在代码中附加处理程序,就像我在这里所做的那样,你可以检查子节点正在使用的控件的类型'是Panel' – 2015-03-13 14:40:24

+0

应该补充的是,名称是:'string name =((Control)sender).Name;' – TaW 2015-03-13 15:13:27

相关问题