2011-12-28 16 views
7

sto aggiungendo un gestore di testo utilizzando il seguente codice:Aggiungi/Rimuovi gestore per testo

private void frmLogin_Load(object sender, EventArgs e) 
{ 
    foreach (Control tb in this.Controls) 
    { 
     if (tb is TextBox) 
     { 
      TextBox tb1 = (TextBox)tb; 
      tb1.KeyDown += new KeyEventHandler(TextBox_KeyDown); 
     }  
    } 
} 

sto anche Rimozione gestore utilizzando il seguente codice:

private void frmLogin_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    foreach (Control tb in this.Controls) 
    { 
     if (tb is TextBox) 
     { 
      TextBox tb1 = (TextBox)tb; 
      tb1.KeyDown -= new KeyEventHandler(TextBox_KeyDown); 
     } 
    } 
} 

è il modo corretto o c'è un'alternativa migliore?

risposta

5

E 'buono, ma non avete bisogno di rimuovere il gestore, e aggiungendo il gestore basta mettere questo:

tb1.KeyDown += TextBox_KeyDown; 

perché new KeyEventHandler(TextBox_KeyDown); è ridondante.

+0

E so che il compilatore crea il gestore add con il nuovo KeyEventHandler, ma il mio strumento di refactoring mi dice che questa è la creazione del delegato ridondante. – Piyey

2

Per rimuovere il gestore di eventi si deve solo fare:

tb1.KeyDown -= TextBox_KeyDown; 
4

Il tuo approccio è bene. Sia nell'addizione che nella rimozione del delegato del gestore eventi, è possibile omettere lo new KeyEventHandler e la parentesi circostante attorno allo TextBox_KeyDown. Questi sono impliciti dal compilatore (a condizione che il metodo TextBox_KeyDown abbia la firma prevista). Questo è puramente una questione di preferenza, naturalmente.

3

Sì, è del tutto corretto. Tuttavia è possibile utilizzare la notazione abbreviata:

tb1.KeyDown -= TextBox_KeyDown; 

Sebbene l'effetto sia esattamente lo stesso.

Tuttavia, è importante determinare se è davvero necessario rimuovere il gestore di eventi? Qual è il ciclo di vita del tuo modulo e del TextBox? se il modulo "possiede" il TexBox, cioè è vissuto più a lungo, quindi non è necessario rimuovere il gestore di eventi.