Frage

Ich versuche, eine benutzerdefinierte Steuerelement zu erstellen und benötigen ein Ereignis daraus zu erhöhen. Die Idee ist, ein Ereignis am Ende des Click-Ereignisses (OnAfterClick) zu erhöhen. Ich fand ein oder zwei Tutorials auf diese Weise, aber ich bin fehlt eindeutig einen Schritt irgendwo; Ich habe folgende.

Bei der Steuerung:

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

Im Programm über die Steuerung:

In InitializeComponent ():

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

Diese Zeile gibt mir einen Compiler-Fehler (cmdMyButton_Click vorhanden ist). Es sagt mir: Kann nicht implizit Typ umwandeln ‚System.EventHandler‘ auf ‚Namespace.MyButton.AfterClick‘

Kann mir jemand sagen, was ich fehle, oder über das Missverständnis, bitte?

War es hilfreich?

Lösung

Ihre Veranstaltung wird erklärt vom Typ AfterClickEvnt sein, aber Sie versuchen, es mit einem EventHandler zu abonnieren. Sie können nicht zwischen den beiden konvertieren.

Optionen:

  • Explizit die richtige Art angeben:

    this.MyButton.AfterClick += new AfterClickEvnt(this.cmdMyButton_Click);
    
  • Verwendung einer impliziten Verfahren Gruppe Umwandlung:

    this.MyButton.AfterClick += cmdMyButton_Click;
    

By the way, ich schlage vor, Sie Ihre benutzerdefinierten Delegattyp entfernen und stattdessen den allgemeinen EventHandler<T> Delegaten verwenden:

public event EventHandler<AfterClickEventArgs> AfterClick;

Andere Tipps

Es gibt einige Unstimmigkeiten in Ihrem Code, so ist es schwer zu sagen, was los ist. (MyArgs wurde newArgs und AfterClickUpdateEvnt wurde AfterClickEvnt). Sie versuchen auch einen Eventhandler anstelle Ihren Delegierten zu verwenden.

Außerdem ist es besser zu Einsatz EventHandler<T>, so dass Sie müssen nicht mit einem Delegierten stören:

public event EventHandler<AfterClickEventArgs> AfterClick;

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top