2015-03-13 21 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

相關問題