2012-03-13 18 views
7

Mam kontrolkę użytkownika o nazwie GameButton, która ma w sobie etykietę. Po dodaniu formantu użytkownika do mojego formularza i dodaniu do niego zdarzenia kliknięcia, jego uruchomienie następuje po kliknięciu tła przycisku niestandardowego, ale nie tekstu w etykiecie? Jak mogę to naprawić, dodając kilka zdarzeń kliknięcia w kodzie kontroli użytkownika?Zdarzenie kliknięcia kontrolki użytkownika nie działa po kliknięciu na tekst wewnątrz kontrolki?

edit: UI ramy: WinForms

+0

ramy UI (WinForm, WPF, Webforms, MVC)? –

+0

przykro, WinForms – Oztaco

+0

Również należy unikać w tym tagów które mają niewiele wspólnego z twoim pytaniem (np. visual-studio) –

Odpowiedz

10

Jeśli mam cię rozumie poprawnie, GameButton usercontrol będzie ognia zdarzenie po kliknięciu na, ale nie wtedy, gdy etykieta jest kliknął - i chcesz oba. Jest tak, ponieważ etykieta (kontrola) znajduje się na wierzchu tła. Dlatego też musisz zarejestrować swoją etykietę również za pomocą zdarzenia kliknięcia. Można to zrobić ręcznie w projektancie lub programowo dla każdej kontrolki na stronie.

Jeśli chcesz zrobić każde urządzenie sterujące w UserControl, umieścić to w przypadku usercontrol za OnLoad i można używać tego samego zdarzenia click dla każdej kontroli:

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: Najlepszym sposobem jest stworzenie kliknij właściwość obsługi zdarzenia click w formancie użytkownika. W ten sposób za każdym razem, gdy dodajesz/usuniesz zdarzenie click do kontroli użytkownika, dodaje/usuwa je automatycznie do wszystkich kontrolek w ramach kontroli użytkownika.

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; 
      } 
     } 
    } 

Jest to jak na kolejny post:

Nadzieja to pomaga!

+0

Chciałem móc dodawać zdarzenia kliknięć do moich przycisków niestandardowych w taki sam sposób, jak przy zwykłych przyciskach w projektancie, ale nie mają one wpływu na etykietę – Oztaco

+0

Nie jestem pewien, czy rozumiem @EfeOzturkoglu. Chcesz, aby twoja kontrola użytkownika wyglądała tak, jakby była zwykłym przyciskiem, gdzie możesz go kliknąć w dowolnym miejscu za pomocą jednego programu obsługi zdarzeń? – ImGreg

+0

tak, tak jak nie chcę dodawać handler'a do kontrolki ORAZ etykiety wewnątrz niego za każdym razem, wystarczy dodać go raz, ilekroć utworzę nowe wystąpienie przycisku – Oztaco

0

Bądź własnością etykiet "włączyć" „False, zdarzenia myszy będzie działać pod kontrolą użytkownika.

Powiązane problemy