2012-03-13 2 views
7

У меня есть пользовательский элемент управления, называемый GameButton с надписью внутри. Когда я добавляю элемент управления пользователя в свою форму и добавляю к нему событие клика, его срабатывает, когда вы нажимаете на фон пользовательской кнопки, но не на текст в ярлыке? Как я могу исправить это, не добавляя кучу событий щелчка внутри кода пользовательских элементов управления?Событие с кликом пользователя не работает при нажатии на текст внутри элемента управления?

редактировать: структура интерфейса: WinForms

+0

рамки пользовательского интерфейса (WinForms, WPF, WebForms, MVC)? –

+0

извините, WinForms – Oztaco

+0

Также избегайте в том числе тегов которые не имеют ничего общего с вашим вопросом (например, visual-studio). –

ответ

10

Если я вас правильно понять, ваш GameButton UserControl будет срабатывать событие при нажатии, но не тогда, когда метка щелкнули - и вы хотите, и другое. Это связано с тем, что метка (элемент управления) находится поверх фона. Поэтому вам необходимо зарегистрировать свой ярлык с событием click. Это можно сделать вручную в дизайнере или программно для каждого элемента управления на странице.

Если вы хотите сделать каждый элемент управления в UserControl, поместить это в событие OnLoad в UserControl, и вы можете использовать то же событие щелчка для каждого элемента управления:

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

public void yourEvent_handler_click (object sender, EventArgs e){ 
    //whatever you want your event handler to do 
} 

EDIT: Лучший способ заключается в создании щелкните свойство обработчика событий в пользовательском элементе управления. Таким образом, каждый раз, когда вы добавляете/удаляете событие click для своего пользовательского элемента управления, он автоматически добавляет/удаляет его во все элементы управления в пользовательском элементе управления.

public new event EventHandler Click { 
     add { 
      base.Click += value; 
      foreach (Control control in Controls) { 
       control.Click += value; 
      } 
     } 
     remove { 
      base.Click -= value; 
      foreach (Control control in Controls) { 
       control.Click -= value; 
      } 
     } 
    } 

Это, как на другую post:

Надеется, что это помогает!

+0

Я хотел иметь возможность добавлять события кликов к своим пользовательским кнопкам так, как вы делаете с помощью обычных кнопок в дизайнере, но они не влияют на метку – Oztaco

+0

Я не уверен, что понимаю @EfeOzturkoglu. Вы хотите, чтобы ваш пользовательский контроль был, как если бы он был обычной кнопкой, где вы можете щелкнуть по нему в любом месте с помощью одного обработчика событий? – ImGreg

+0

Да, как будто я не хочу добавлять обработчик к элементу управления и метку внутри него каждый раз, просто добавьте его каждый раз, когда я создаю новый экземпляр кнопки – Oztaco

0

Сделать «включить» свойство ярлыков «Ложные, то события мыши будет работать под контролем пользователя.

Смежные вопросы