2015-03-13 1 views
0

У меня есть вопрос, касающийся обработки на C# события:Получить Имя элемента с Click Event Handler на панели

У меня есть 5 панелей, и я хотел бы получить каждый Имя собственности на Щелк.

Я попытался следующие на 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

+0

WinForms. Нет WPF, ни WebForms. – DehWeh

ответ

1

Вы должны добавить обработчик событий к каждой панели, а не к форме. вы просто сделать это:

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

+2

Вы можете перебирать дочерние элементы родительского элемента управления и присоединять обработчик в коде, как я здесь, вы можете проверить тип элемента управления, который использует дочерний элемент: «is Panel» –

+0

. Следует добавить, что код для доступа к Имена: 'string name = ((Control) отправитель) .Name;' – TaW