Avec un exemple ce sera plus parlant...
On définit le delegate, qui correspond en fait à la "signature" des méthodes qui gèrent l'évènement :
public delegate void TemperatureChangedEventHandler(object sender, EventArgs e);
Par convention, on utilise généralement 2 paramètres:
- sender correspond à l'objet qui envoie l'évènement
- e contient les données de l'évènement (aucune dans ce cas, EventArgs est juste une "coquille vide" qui sert de base à toutes les classes qui décrivent les données d'évènement)
Note que rien n'oblige à utiliser cette convention, on aurait pu définir le delegate avec d'autres paramètres.
Dans la classe Thermometre, on définit un évènement qui a pour type ce delegate:
public event TemperatureChangedEventHandler TemperatureChanged;
Et on crée une méthode pour faciliter le déclenchement de l'évènement (pas obligatoire mais pratique) :
1 2 3 4 5 6 7 8 9 10 11
| protected void OnTemperatureChanged()
{
// On vérifie si des handlers ont été définis pour l'évènement :
if (TemperatureChanged != null)
{
// Et on appelle l'évènement
// En pratique cela appelle successivement toutes les méthodes qui
// ont été définies comme handlers de cet évènement
TemperatureChanged(this, EventArgs.Empty);
}
} |
Maintenant, dans le code du thermomètre, il suffit d'appeler cette méthode quand on détecte un changement de température :
1 2 3 4
| if (newValue != oldValue)
{
OnTemperatureChanged();
} |
(évidemment ce code est bidon, à toi de l'adapter à ta classe...)
Voilà, l'évènement est prêt à être utilisé !
Maintenant, voyons comment l'utiliser :
Dans le code de la Form (ou ailleurs...) on crée une méthode pour traiter l'évènement :
1 2 3 4
| private void thermo_TemperatureChanged(object sender, EventArgs e)
{
MessageBox.Show("La température a changé ! Il fait maintenant " + thermo.Temperature + "°C");
} |
(Note que cette méthode a le même type de retour et les mêmes paramètres que le delegate TemperatureChangedEventHandler)
Pour "s'abonner" à l'évènement, on indique que lé méthode thermo_TemperatureChanged doit être appelée quand l'évènement TemperatureChanged se produit :
thermo.TemperatureChanged += thermo_TemperatureChanged;
Voilà, c'est tout ! J'espère que tu y vois plus clair maintenant...
Partager