Question

Je suis en train de créer un contrôle personnalisé et la nécessité de déclencher un événement de celui-ci. L'idée est de déclencher un événement à la fin de l'événement click (OnAfterClick). J'ai trouvé un ou deux tutoriels à faire, mais je manque clairement une étape quelque part; J'ai ce qui suit.

Dans le contrôle:

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

Dans le programme en utilisant la commande:

Dans InitializeComponent ():

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

Cette ligne me donne une erreur de compilation (cmdMyButton_Click existe). Il me dit: Impossible de convertir implicitement le type 'System.EventHandler' à 'Namespace.MyButton.AfterClick'

Quelqu'un peut-il me dire ce que je suis absent, ou malentendu à ce sujet, s'il vous plaît?

Était-ce utile?

La solution

Votre événement est déclaré être de type AfterClickEvnt, mais vous essayez de vous abonner à l'aide d'un EventHandler. Vous ne pouvez pas convertir entre les deux.

Options:

  • spécifier clairement le type:

    this.MyButton.AfterClick += new AfterClickEvnt(this.cmdMyButton_Click);
    
  • Utiliser une conversion de groupe Méthode implicite:

    this.MyButton.AfterClick += cmdMyButton_Click;
    

Par ailleurs, je vous suggère de supprimer votre type de délégué personnalisé et utilisez plutôt le délégué EventHandler<T> générique:

public event EventHandler<AfterClickEventArgs> AfterClick;

Autres conseils

Il y a quelques différences dans votre code, il est donc difficile de dire ce qui se passe. (MyArgs est devenu newArgs, et AfterClickUpdateEvnt est devenu AfterClickEvnt). Vous essayez aussi d'utiliser un gestionnaire d'événements à la place de votre délégué.

En outre, il est préférable d'utiliser EventHandler<T> afin que vous n'avez pas à se soucier d'un délégué:

public event EventHandler<AfterClickEventArgs> AfterClick;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top