2009-06-03 11 views
23

Ciao. Ho un UserControl che contiene una casella di testo. Volevo accedere all'evento textchanged della casella di testo, ma nelle proprietà dell'evento di usercontrol non vedo gli eventi per la casella di testo. Come posso esporre e gestire particolari eventi dei controlli figlio da UserControl esposto pubblicamente in Winforms con C#.esporre ed aumentare caso di un controllo figlio in un UserControl in C#

risposta

36

È possibile emergere un nuovo evento e superare eventuali sottoscrizioni direttamente attraverso il controllo, se ti piace:

public class UserControl1 : UserControl 
{ 
    // private Button saveButton; 

    public event EventHandler SaveButtonClick 
    { 
     add { saveButton.Click += value; } 
     remove { saveButton.Click -= value; } 
    } 
} 
+0

Impressionante! Ho fatto qualcosa di simile, aggiungendo esplicitamente un gestore di eventi come ho esposto pubblicamente il controllo figlio attraverso l'usercontrol. Il tuo suggerimento è il modo più ordinato di farlo! Grazie! –

+11

Nonostante la sua eleganza, questa soluzione ha un grave inconveniente: la 'argomento sender' passato al gestore sarà il pulsante, non l'UserControl ... Questo ci rende impossibile utilizzare lo stesso gestore per diverse istanze del controllo –

+0

Is qualcos'altro per fare questo lavoro? in qualche modo il gestore di eventi aggiunto dichiarativo non funziona – Nap

1

Esporre l'intera TextBox come una proprietà pubblica nel controllo utente e iscriviti alla sua eventi nel modo che desiderate.
Esempio:

class myUserControl: UserControl { 
private TextBox _myText; 
public TextBox MyText { get {return _myText; } } 

}

Dopo aver fatto questo è possibile iscriversi su uno qualsiasi dei suoi eventi in questo modo:

theUserControl.MyText.WhatEverEvent += ... 

Spero che questo aiuti!

+0

grazie, avevo fatto cosa simile, al momento. Stavo cercando una soluzione elegante che è stata fornita sopra.Grazie per il tuo aiuto. + 1 –

Problemi correlati