2009-08-07 16 views
5

Soy relativamente nuevo en la programación, como verá pronto ...
Tengo 2 eventos que ejecutan el mismo código. Actualmente tengo el siguiente pseudo código para un DataGridView:C# combina 2 eventos en un método

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

¿Hay una manera de combinar esto en un evento? ¿Hay una mejor manera de hacer esto?

Respuesta

7

¿Por qué no tener solo un método y asignarlo a dos eventos?

private void dgv_CellEvent(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "123"; 
} 

// In the event mapping 

dgv.CellEnter += dgv_CellEvent; 
dgv.CellClick += dgv_CellEvent; 
+0

Parece la forma más concisa y "correcta" de hacer esto. ¡Gracias! – muhan

1

La manera más fácil es hacer esto:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    dgv_CellClick(sender, e); 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

Hay código generado automáticamente por el IDE que los cables de seguridad de sus eventos sin embargo, y podrá modificar esto para que tanto enganchan el mismo controlador de eventos, pero no me gusta jugar con el código generado.

En ASP.NET o WPF, su cuadrícula de datos o similar tiene una propiedad que determina el nombre del controlador de eventos, por lo que podría simplemente señalarlos a ambos.

Si estaba programando en VB.NET en lugar de C#, puede escribir un método y usar la palabra clave Handles para decir que este método maneja ambos eventos.

+2

... o podría refactorizar el contenido de los controladores de eventos en otro método, y tener ambos manejadores de eventos llamar a ese método. –

+0

Bateme a la respuesta por 3 segundos :) – mlevit

+0

@mlevit - ¡Realmente lo aproveché y lo edité una vez después de enviarlo también! –

1

puede probar con el siguiente:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    string abc = "abc"; 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    dgv_CellEnter(sender, e); 
} 

De esta forma cuando puedes hacer un click o pulsar Enter se ejecutará el mismo método.

Gracias

+2

Es probally mejor tener un método intermediario en lugar de llamar al controlador de eventos de un control diferente – Gregory

6

Bien, la respuesta rápida es sí. Ponga las agallas de los métodos en su propio método y luego haga que el evento onclick llame a ese método. Esto le dará solo un lugar para actualizar el código en caso de que necesite cambiarlo.

Hay 100 maneras diferentes de hacerlo, y esto es probablemente el más fácil.

Por lo tanto crear algo como esto:

protected void MyNewMethod() 
{ 
    string abc = "123"; 
} 

y luego sus otros métodos se acaba de llamarlo así:

private void dgv_CellEnter(object sender, DataGridViewCellEventArgs e) 
{ 
    MyNewMethod(); 
} 

private void dgv_CellClick(object sender, DataGridViewCellEventArgs e) 
{ 
    MyNewMethod(); 
} 

Opción 2

Sólo tiene que llamar el mismo método del margen de beneficio . Realmente solo necesita uno de esos métodos y el evento en el marcado puede llamar al mismo.

+1

Con respecto a la Opción 2, la pregunta parece estar relacionada con Windows Forms, que no tiene marcado. –

+0

Ah ... lo lamento mucho. todavía se aplica simplemente seleccione el control y abra la ventana de propiedades y luego seleccione el evento "pestaña". y puede seleccionar el mismo evento del menú desplegable. – YetAnotherDeveloper

+1

Considero que es "la forma correcta de hacerlo". Una de las ventajas de hacerlo de esta manera es que si los eventos tienen firmas diferentes, puede llamar a MyNewMethod(). – stone

2

En la ventana de propiedades (utilizando C# Express) puede seleccionar manejadores de eventos en un menú desplegable o escribir manualmente el nombre de un método. La firma solo tiene que coincidir. Supongo que esto es lo mismo en VS.