FAQ ASP.NET/C#

FAQ ASP.NET/C#Consultez toutes les FAQ
Nombre d'auteurs : 39, nombre de questions : 371, dernière mise à jour : 15 juin 2021
Sommaire→WebForms→EvénementsGénérer un évènement:
D'abord il faut créer les argument de l'événement :
public class MyEventArgs : EventArgs
{
// readonly permet de verouiller les arguments apres le constructeur
private readonly bool myArg1 ;
private readonly int myArg2;
//Constructeur
public MyEventArgs(bool Arg1, int Arg2)
{
this.myArg1 = Arg1;
this.myArg2 = Arg2;
}
public int Arg2
{
get { return myArg2; }
}
public bool Arg1
{
get { return myArg1; }
}
}Il faut aussi un délégué pour typer l'évènement
public delegate void MyEventHandler(object sender, MyEventArgs e);Ensuite il faut créer l'évenement et déclencher les delegates inscrits dans l'événement de la classe émétrice :
public class MyClass
{
//.....
public event MyEventHandler MyEvent;
// la méthode protégé surchargeable OnMyEvent invoque les délégués.
// L'emeteur (Sender) est toujours "this", l'instance courante de la classe.
protected virtual void OnMyEvent(MyEventArgs e)
{
if (MyEvent != null)
{
// invoque les délégués de l'événement.
MyEvent(this, e);
}
}
}Pour déclencher l'évenement à partir d'une methode de la classe émétrice :
// bool bolMaValeur;
// int intMaValeur;
OnMyEvent(new MyEventArgs(bolMaValeur, intMaValeur));Consommer un évènement
Enfin il faut créer et inscrire un délégué dans l'évènement pour que celui-ci soit appelé par la classe émétrice
class Main
{
MyClass mc = new MyClass();
public Main()
{
// on assigne notre delegate a l'événement de l'objet
mc.MyEvent += new MyEventHandler(this.MyDelegate);
}
public void MyDelegate(object Sender, MyEventArgs e)
{
// traitement a effectuer
}
}Remarques
- Un évènement est TOUJOURS multicast, on peut lui faire contenir plusieurs délégués.
- On ne peut pas changer les délégués contenus dans un évènement depuis du code extérieur à la classe émétrice si on ne connait pas le nom du délégué. La cause en est la méthode OnEvent qui masque le délégué EventHandler associé ce qui nous empeche d'obtenir la méthode GetInvocationList() du délégué associé à l'évènement.



