2012-03-13 5 views
7

Ho un controllo utente chiamato GameButton che ha un'etichetta al suo interno. Quando aggiungo il controllo utente al mio modulo e aggiungo un evento click, esso viene attivato quando si fa clic sullo sfondo del pulsante personalizzato, ma non il testo nell'etichetta? Come risolverei questo problema senza aggiungere un gruppo di eventi di clic all'interno del codice dei controlli utente?L'evento click del controllo utente non funziona quando si fa clic sul testo all'interno del controllo?

edit: UI framework: WinForms

+0

framework di interfaccia utente (WinForms, WPF, Webforms, MVC)? –

+0

dispiace, WinForms – Oztaco

+0

Inoltre si prega di evitare di includere i tag che ha poco o nulla a che fare con la tua domanda (es. visual-studio) –

risposta

10

Se vi sto capendo correttamente, l'UserControl GameButton scatterà l'evento quando cliccato, ma non quando l'etichetta viene cliccato - e si vuole entrambi. Questo perché l'etichetta (un controllo) è in cima allo sfondo. Pertanto, è necessario registrare l'etichetta anche con l'evento click. Questo può essere fatto manualmente nel designer o programmaticamente per ciascun controllo sulla pagina.

Se si vuole fare tutti i controlli in UserControl, mettere questo in evento OnLoad della UserControl e si può usare lo stesso evento click per ogni controllo:

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: Il modo migliore è quello di creare la fare clic sulla proprietà del gestore eventi nel controllo utente. In questo modo, ogni volta che aggiungi/rimuovi un evento click al tuo controllo utente, lo aggiunge/rimuove automaticamente a tutti i controlli all'interno del controllo utente.

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

Questo è come per un altro post:

Spero che questo aiuti!

+0

Volevo essere in grado di aggiungere eventi di clic ai miei pulsanti personalizzati come con i normali pulsanti della finestra di progettazione, ma non influiscono sull'etichetta – Oztaco

+0

Non sono sicuro di aver capito @EfeOzturkoglu. Vuoi che il tuo usercontrol sia come se fosse un normale pulsante in cui puoi fare clic su di esso ovunque con un gestore di eventi? – ImGreg

+0

sì, come se non volessi dover aggiungere un gestore al controllo E l'etichetta al suo interno ogni volta, aggiungilo una volta ogni volta che creo una nuova istanza del pulsante – Oztaco

0

Effettuare la proprietà "attiva" delle etichette "falsa, allora gli eventi del mouse funziona in controllo utente.