2011-12-28 23 views
7

Estoy añadiendo un controlador de cuadro de texto con el siguiente código:Agregar/Quitar controlador de cuadro de texto

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

Yo también estoy quitando manejador usando el siguiente código:

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

es la forma correcta o ¿Hay una mejor alternativa?

Respuesta

5

Es bueno, pero no tienes que quitar el controlador, y añadiendo el controlador sólo hay que poner esto:

tb1.KeyDown += TextBox_KeyDown; 

porque new KeyEventHandler(TextBox_KeyDown); es redundante.

+0

Y sé que el compilador crea el controlador de agregar con el nuevo KeyEventHandler, pero mi herramienta de refactorización me dice que se trata de una creación de delegado redundante. – Piyey

2

Para quitar el controlador de eventos que sólo debe hacer:

tb1.KeyDown -= TextBox_KeyDown; 
4

Su enfoque está muy bien. Tanto en la adición como en la eliminación del delegado del controlador de eventos, puede omitir el new KeyEventHandler y los paréntesis que los rodean alrededor de TextBox_KeyDown. Esto está implícito en el compilador (siempre que el método TextBox_KeyDown tenga la firma esperada). Esto es puramente una cuestión de preferencia, por supuesto.

3

Sí, eso es del todo correcto. Sin embargo, puede usar la notación abreviada:

tb1.KeyDown -= TextBox_KeyDown; 

Aunque el efecto es exactamente el mismo.

Sin embargo, ¿vale la pena determinar si realmente necesita eliminar su controlador de eventos? ¿Cuál es el ciclo de vida de su formulario y el TextBox? si el formulario 'posee' el TexBox, es decir, tiene una vida más larga, no es necesario que elimine el controlador de eventos.

Cuestiones relacionadas