2009-07-01 15 views
9

Ho un controllo utente personalizzato sui moduli di Windows. Questo controllo ha alcune etichette su di esso.Clic controllo utente - Windows Form

Mostrerò dinamicamente un array di questi controlli sul mio modulo che conterrà diversi bit di dati.

Quello che sto cercando di fare è sapere quale controllo utente è stato selezionato quando faccio clic su di esso.

Questo funziona quando si fa clic su uno spazio vuoto sul controllo utente, tuttavia, se si fa clic su un'etichetta sul controllo utente, questo non riconoscerà il clic del controllo utente.

Qualche idea su come posso fare un clic completo del controllo utente, anche se si fa clic su un'etichetta sul controllo?

Se questa domanda non è chiara o se occorrono ulteriori informazioni, si prega di lasciare un commento.

Sto facendo questo in C#.

Grazie!

risposta

11

L'evento click del controllo utente non viene attivato quando si fa clic su un altro controllo sul controllo utente. È necessario associare manualmente l'evento click di ciascun elemento. Si può fare questo con un semplice loop su codebehind del controllo dell'utente:

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

Dopo questo pezzo di codice workd, MyUserControl_Click sparerà quando alcun controllo sul controllo utente viene cliccato.

+0

fantastico! questo totalmente aiutato. Grazie mille! – CodeLikeBeaker

+1

Grazie !!! Si noti che è necessario includere un'aggiunta/rimozione ricorsiva per i controlli all'interno dei controlli (ad esempio i controlli all'interno di un pannello) –

+0

Inoltre, non si deve dimenticare di controllare i tipi di oggetto nel metodo evento: 'public public MyUserControl_Click (Object mittente , EventArgs e) {if (sender.GetType() is Label) {...}} '. Altrimenti potresti facilmente incorrere in problemi. – libjup

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

Tenete presente che questo non aggiungerà clickevents etichette in groupboxes, pannelli ecc per il -EventHandler "SameAsForm_Click".

Problemi correlati