2009-07-01 6 views
9

У меня есть пользовательский элемент управления в моих окнах. У этого элемента управления есть несколько надписей.User Control Click - Windows Forms

Я буду динамически отображать массив этих элементов управления в моей форме, который будет содержать разные биты данных.

Что я пытаюсь сделать, это знать, какой пользовательский элемент управления был выбран, когда я нажимаю на него.

Это работает, когда я нажимаю на пустое место в пользовательском элементе управления, однако, если я нажму на любую метку в пользовательском элементе управления, он не узнает щелчок элемента управления пользователя.

Любые мысли о том, как я могу сделать полный пользовательский щелчок, даже если щелкнуть метку на элементе управления?

Если этот вопрос непонятен или вам нужна дополнительная информация, пожалуйста, оставьте комментарий.

Я делаю это в C#.

Спасибо!

ответ

11

Событие клика элемента управления пользователя не срабатывает при нажатии на другой элемент управления пользователя. Вам нужно вручную привязать событие click каждого элемента. Вы можете сделать это с помощью простого цикла на коде пользовательского элемента управления:

foreach (Control control in Controls) 
{ 
    // I am assuming MyUserControl_Click handles the click event of the user control. 
    control.Click += MyUserControl_Click; 
} 

После этого куска кода workd, MyUserControl_Click срабатывает, когда любой элемент управления на пользовательском элементе управления нажата.

+0

awesome! это полностью помогло. Огромное спасибо! – CodeLikeBeaker

+1

Спасибо !!! Обратите внимание, что вы должны включить рекурсивное добавление/удаление для элементов управления, которые находятся внутри элементов управления (например, элементы управления внутри панели) –

+0

Также не следует забывать проверять типы объектов в методе событий: public void MyUserControl_Click (отправитель объекта , EventArgs e) {if (sender.GetType() является меткой) {...}} '. В противном случае вы можете легко столкнуться с проблемами. – libjup

0
foreach (Control c in this.Controls) 
    { 
     c.Click += new EventHandler(SameAsForm_Click); 
    } 

Имейте в виде, что это не добавит clickevents наклеек в рамках группы, панель и т.д. в -EventHandler „SameAsForm_Click“.