2010-05-01 4 views
1

J'essaie de créer un contrôle personnalisé et de déclencher un événement à partir 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 à ce sujet, mais il me manque clairement une étape quelque part; J'ai ce qui suit.Événements de contrôle personnalisés en C#

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:

En 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 le type 'System.EventHandler' en 'Namespace.MyButton.AfterClick'

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

Répondre

3

Votre événement est déclaré de type AfterClickEvnt, mais vous essayez de vous y abonner en utilisant un EventHandler. Vous ne pouvez pas convertir entre les deux.

Options:

  • État Explicitement le type:

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

    this.MyButton.AfterClick += cmdMyButton_Click; 
    

D'ailleurs, je suggère vous retirez votre custom de le type légat et utilisent à la place le délégué EventHandler<T> générique:

public event EventHandler<AfterClickEventArgs> AfterClick; 
0

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 également d'utiliser un EventHandler à 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;

+0

Désolé - je l'ai nettoyé les écarts :-) –

Questions connexes