Event, instruction, exemple L'exemple suivant utilise des événements pour chronométrer en secondes une démonstration du 100 mètres le plus rapide. Le code illustre toutes les méthodes, propriétés et instructions relatives aux événements, y compris l'instruction Event. La classe qui déclenche un événement est la source de celui-ci, alors que les classes qui l'implémentent sont les récepteurs. Une source d'événement peut avoir plusieurs récepteurs pour les événements qu'elle génère. Après génération par une classe, l'événement est déclenché pour chaque classe réceptrice des événements pour cette instance de l'objet. L'exemple utilise aussi une feuille (Form1) contenant un bouton (Command1), une étiquette (Label1) et deux zones de texte (Text1 et Text2). Lorsque vous cliquez sur le bouton, la première zone de texte affiche "Départ" et la seconde commence le chronométrage. Une fois le temps total (9,84 secondes) écoulé, la première zone de texte affiche "Arrivée", la seconde "9,84". Le code correspondant à Form1 indique les états initial et final de la feuille. Elle contient aussi le code exécuté au déclenchement des événements. Option Explicit Private WithEvents mText As TimerState Private Sub Command1_Click() Text1.Text = "Départ" Text1.Refresh Text2.Text = "0" Text2.Refresh Call mText.TimerTask(9.84) End Sub Private Sub Form_Load() Command1.Caption = "Cliquez pour lancer la minuterie " Text1.Text = "" Text2.Text = "" Label1.Caption = "Le meilleur temps du 100 mètres est de :" Set mText = New TimerState End Sub Private Sub mText_ChangeText() Text1.Text = "Arrivée" Text2.Text = "9,84" End Sub Private Sub mText_UpdateTime(ByVal dblJump As Double) Text2.Text = Str(Format(dblJump, "0")) DoEvents End Sub Le code restant se trouve dans un module de classe appelé TimerState. Les instructions Event déclarent les procédures lancées lorsque les événements sont déclenchés. Option Explicit Public Event UpdateTime(ByVal dblJump As Double) Public Event ChangeText() Public Sub TimerTask(ByVal Duration As Double) Dim dblStart As Double Dim dblSecond As Double Dim dblSoFar As Double dblStart = Timer dblSoFar = dblStart Do While Timer < dblStart + Duration If Timer - dblSoFar >= 1 Then dblSoFar = dblSoFar + 1 RaiseEvent UpdateTime(Timer - dblStart) End If Loop RaiseEvent ChangeText End Sub