Pregunta

Estoy intentando crear un control personalizado y la necesidad de generar un evento de ella. La idea es generar un evento al final del evento click (OnAfterClick). He encontrado uno o dos tutoriales sobre cómo hacer esto, pero estoy perdiendo claramente un paso en alguna parte; Tengo el siguiente.

En el control:

public class AfterClickEventArgs : EventArgs
{
  ...
}

public partial class MyButton : CommandButton
{
    public delegate void AfterClickEvnt(object sender, AfterClickEventArgs e);

    public event AfterClickUpdatedEvnt AfterClick;

}

protected override void OnClick(EventArgs e)
{
    ...
    Processing here
    ...

    AfterClickEventArgs myArgs = new AfterClickEventArgs();                
    AfterClick(this, myArgs);
}

En el programa usando el control de:

En InitializeComponent ():

this.MyButton.AfterClick += new System.EventHandler(this.cmdMyButton_Click);

Esta línea es que me da un error de compilación (cmdMyButton_Click qué existe). Me dice: No se puede convertir implícitamente el tipo 'System.EventHandler' a 'Namespace.MyButton.AfterClick'

Puede alguien decirme lo que me falta, o un malentendido acerca de esto, por favor?

¿Fue útil?

Solución

Su evento se declara de tipo AfterClickEvnt, pero que está tratando de suscribirse a él mediante un EventHandler. No se puede convertir entre los dos.

Opciones:

  • explícitamente indicar el tipo correcto:

    this.MyButton.AfterClick += new AfterClickEvnt(this.cmdMyButton_Click);
    
  • Usar una conversión grupo método implícito:

    this.MyButton.AfterClick += cmdMyButton_Click;
    

Por cierto, le sugiero que quita el tipo de delegado personalizada y que utiliza el genérico delegado EventHandler<T>:

public event EventHandler<AfterClickEventArgs> AfterClick;

Otros consejos

Hay algunas discrepancias en su código, por lo que es difícil decir lo que está pasando. (MyArgs convirtió newArgs, y se convirtió en AfterClickUpdateEvnt AfterClickEvnt). También intenta utilizar un manejador de sucesos en lugar de su delegado.

Además, es mejor usar EventHandler<T> de modo que usted no tiene que molestarse con un delegado:

public event EventHandler<AfterClickEventArgs> AfterClick;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top