Partager via


Comment : implémenter des événements dans votre classe

Mise à jour : novembre 2007

Les procédures suivantes décrivent comment implémenter un événement dans une classe. La première procédure implémente un événement qui ne possède pas de données associées ; elle utilise les classes System.EventArgs et System.EventHandler pour les données d'événement et le gestionnaire délégué. La deuxième procédure implémente un événement avec des données personnalisées ; elle définit des classes personnalisées pour les données d'événement et le gestionnaire d'événements délégué.

Pour obtenir un exemple complet qui illustre le déclenchement et la gestion d'événements, consultez Comment : déclencher et utiliser des événements.

Pour implémenter un événement sans données spécifiques à l'événement

  1. Définissez un membre d'événement public dans votre classe. Affectez le type du membre d'événement à un délégué System.EventHandler.

    public class Countdown 
    {
        ...
        public event EventHandler CountdownCompleted;   
    }
    
    Public Class Countdown
        ...
        Public Event CountdownCompleted As EventHandler
    End Class
    
  2. Fournissez une méthode protégée à votre classe qui déclenche l'événement. Nommez la méthode OnEventName. Déclenchez l'événement dans la méthode.

    public class Countdown 
    {
        ...
        public event EventHandler CountdownCompleted;   
        protected virtual void OnCountdownCompleted(EventArgs e)    {        if (CountdownCompleted != null)            CountdownCompleted(this, e);    }
    }
    
    Public Class Countdown
       ...
       Public Event CountdownCompleted As EventHandler
       Protected Overridable Sub OnCountdownCompleted(e As EventArgs)      RaiseEvent CountdownCompleted(Me, e)   End Sub
    End Class
    
  3. Déterminez quand déclencher l'événement dans votre classe. Appelez OnEventName pour déclencher l'événement.

    public class Countdown 
    {
        ...
        public void Decrement
        {
            internalCounter = internalCounter - 1;
            if (internalCounter == 0)
                OnCountdownCompleted(new EventArgs());
        }
    }
    
    Public Class Countdown
        ...
        Public Function Decrement
            InternalCounter = internalCounter - 1
            If internalCounter = 0
                OnCountdownComplete(New EventArgs())
            End If
        End Function
    End Class
    

Pour implémenter un événement avec des données spécifiques à l'événement

  1. Définissez une classe qui fournit des données pour l'événement. Nommez la classe EventNameArgs, dérivez la classe de System.EventArgs et ajoutez tous les membres spécifiques à l'événement.

    public class AlarmEventArgs : EventArgs 
    {
       private readonly int nrings = 0;
       private readonly bool snoozePressed = false;
    
       //Constructor.
       public AlarmEventArgs(bool snoozePressed, int nrings) 
       {
          this.snoozePressed = snoozePressed;
          this.nrings = nrings;
       }
    
       //Properties.
       public string AlarmText {  
          ...
       }
       public int NumRings {
          ...
       }
       public bool SnoozePressed{
          ...
       }
    }
    
    Public Class AlarmEventArgs
       Inherits EventArgs
       Private nrings As Integer = 0
       Private _snoozePressed As Boolean = False
    
       'Constructor.
       Public Sub New(ByVal snoozePressed As Boolean, ByVal nrings As Integer) 
          Me.snoozePressed = snoozePressed
          Me.nrings = nrings
       End Sub
    
       'Properties.
       Public ReadOnly Property AlarmText() As String
          ...
       End Property 
    
       Public ReadOnly Property NumRings() As Integer
          ...
       End Property 
    
       Public ReadOnly Property SnoozePressed() As Boolean
          ...
       End Property
    End Class
    
  2. Déclarez un délégué pour l'événement. Nommez le délégué EventNameEventHandler.

    public delegate void AlarmEventHandler(object sender, AlarmEventArgs e);
    
    Public Delegate Sub AlarmEventHandler(sender As Object, e As AlarmEventArgs)
    
  3. Définissez un membre d'événement public nommé EventName dans votre classe. Affectez le type du membre d'événement au type du délégué d'événement.

    public class AlarmClock 
    {
        ...
        public event AlarmEventHandler Alarm;
    }
    
    Public Class AlarmClock
        ...
        Public Event Alarm As AlarmEventHandler
    End Class
    
  4. Définissez une méthode protégée dans votre classe qui déclenche l'événement. Nommez la méthode OnEventName. Déclenchez l'événement dans la méthode.

    public class AlarmClock 
    {
        ...
        public event AlarmHandler Alarm;
        protected virtual void OnAlarm(AlarmEventArgs e)    {      if (Alarm != null)           Alarm(this, e);     }
    }
    
    Public Class AlarmClock
        ...
        Public Event Alarm As AlarmEventHandler
        Protected Overridable Sub OnAlarm(e As AlarmEventArgs)        RaiseEvent Alarm(Me, e)    End Sub
    End Class
    
  5. Déterminez quand déclencher l'événement dans votre classe. Appelez OnEventName pour déclencher l'événement et passer dans les données spécifiques à l'événement à l'aide de EventNameEventArgs.

    Public Class AlarmClock
    {
        ...
        public void Start()
        {
            ...
            System.Threading.Thread.Sleep(300);
            AlarmEventArgs e = new AlarmEventArgs(false, 0);
            OnAlarm(e);
        }
    }
    
    Public Class AlarmClock
        ...
        Public Function Start
            ...
            System.Threading.Thread.Sleep(300)
            Dim e As AlarmEventArgs = New AlarmEventArgs(False, 0)
            OnAlarm(e)
        End Function
    End Class
    

Voir aussi

Tâches

Comment : déclencher et utiliser des événements

Concepts

Événements et délégués

Déclenchement d'un événement

Autres ressources

Gestion et déclenchement d'événements