2010-05-27 16 views
6

He creado un control de usuario que contiene un botón. Estoy usando este control en mi formulario de win que se cargará en tiempo de ejecución después de obtener datos de la base de datos.Cómo trabajar con delegados y controlador de eventos para control de usuario

Ahora necesito eliminar una fila de una tabla de datos en el evento Click de ese botón.

El problema es que cómo capturo ese evento en mi formulario. Actualmente entra en la definición de evento de clic de btn del control de usuario.

Respuesta

18

Usted puede crear su propio evento delegado de la siguiente manera en el control de usuario:

public event UserControlClickHandler InnerButtonClick; 
public delegate void UserControlClickHandler (object sender, EventArgs e); 

se llama al evento desde su controlador usando la siguiente:

protected void YourButton_Click(object sender, EventArgs e) 
{ 
    if (this.InnerButtonClick != null) 
    { 
     this.InnerButtonClick(sender, e); 
    } 
} 

entonces se puede enganchar en el evento usando

UserControl.InnerButtonClick+= // Etc. 
+0

Niche nick :), ¿Podría por favor hablar un poco de él? No sé mucho sobre delegados, eventos e interfaces. Cómo funciona. ¿Cómo reconocerá que se ha hecho clic en un botón? –

+1

Básicamente, un delegado solo apunta a una función específica. Los delegados son multidifusión, lo que significa que pueden señalar simultáneamente múltiples métodos. Es decir. llamar al delegado una vez disparará todos los métodos adjuntos. No me importa explicar las interfaces, ya que son irrelevantes en esta pregunta, pero hay un montón de preguntas sobre ellos en SO si haces una búsqueda. – GenericTypeTea

+0

¿Por qué no puedo escribir el evento público int funName? ¿Qué es realmente aceptado por los eventos? –

3

No es necesario declarar una nueva delegación te En su control de usuario:

public class MyControl : UserControl 
{ 
    public event EventHandler InnerButtonClick; 
    public MyControl() 
    { 
    InitializeComponent(); 
    innerButton.Click += new EventHandler(innerButton_Click); 
    } 
    private void innerButton_Click(object sender, EventArgs e) 
    { 
    if (InnerButtonClick != null) 
    { 
     InnerButtonClick(this, e); // or possibly InnerButtonClick(innerButton, e); depending on what you want the sender to be 
    } 
    } 
} 
+0

¿No necesita una definición para innerButton en algún lugar? ¿Le falta una pieza? – 1337Rooster

+0

InnerButtonClick está definido por esta línea: "evento público EventHandler InnerButtonClick;" Si no necesita un controlador de eventos especializado, no es necesario redefinir el de base. –

Cuestiones relacionadas