Instruction RaiseEvent
Déclenche un événement déclaré au niveau du module dans une classe, un formulaire ou un document.
Syntaxe
RaiseEventeventname [ ( argumentlist ) ]
L’élément eventname obligatoire est le nom d’un événement déclaré au sein du module ; il respecte les conventions d’affectation des noms de variables Visual Basic.
L’instruction RaiseEvent est composée des éléments suivants :
Élément | Description |
---|---|
Eventname | Obligatoire. Nom de l’événement à déclencher. |
argumentlist | Facultatif. Liste délimitée par des virgules de variables, de tableaux ou d’expressions. La liste d’arguments doit être placée entre parenthèses. S’il n’y a pas d’argument, les parenthèses doivent être omises. |
Remarques
Si l’événement n’a pas été déclaré au sein du module dans lequel il est déclenché, une erreur se produit. Le fragment suivant montre une déclaration d’événement et une procédure dans lesquelles l’événement est déclenché.
' Declare an event at module level of a class module
Event LogonCompleted (UserName as String)
Sub
' Raise the event.
RaiseEvent LogonCompleted ("AntoineJan")
End Sub
Si l’événement n’a pas d’arguments, l’inclusion de parenthèses vides dans l’appel RaiseEvent de l’événement provoque une erreur. Vous ne pouvez pas utiliser RaiseEvent pour déclencher des événements qui ne sont pas explicitement déclarés dans le module.
Par exemple, si un formulaire a un événement Click , vous ne pouvez pas déclencher son événement Click à l’aide de RaiseEvent. Si vous déclarez un événement Click dans le module de formulaire, il masque l’événement Click du formulaire. Vous pouvez toujours appeler l’événement Click du formulaire en utilisant la syntaxe normale pour appeler l’événement, mais pas en utilisant l’instruction RaiseEvent .
Le déclenchement des événements s’effectue dans l’ordre dans lequel les connexions ont été établies. Étant donné que les événements peuvent avoir des paramètres ByRef , un processus qui se connecte en retard peut recevoir des paramètres qui ont été modifiés par un gestionnaire d’événements antérieur.
Exemple
L’exemple suivant utilise des événements pour compter les secondes pendant une démonstration de la course de 100 mètres la plus rapide. Le code illustre toutes les méthodes, propriétés et instructions liées aux événements, notamment l’instruction RaiseEvent.
La classe qui déclenche un événement est la source de l’événement et les classes qui implémentent l’événement sont les récepteurs. Une source d’événement peut avoir plusieurs récepteurs pour les événements qu’elle génère. Lorsque la classe déclenche l’événement, ce dernier se déclenche sur chaque classe qui a été élue en tant que récepteur d’événements pour cette instance de l’objet.
L’exemple utilise également un formulaire (Form1
) avec 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 s’affiche à partir de maintenant et la seconde commence à compter les secondes. Lorsque le temps plein (9,58 secondes) s’est écoulé, la première zone de texte affiche Jusqu’à maintenant et la seconde affiche 9,58.
Le code spécifie les états initial et terminal du formulaire. Il contient également le code exécuté lors du déclenchement des événements.
Option Explicit
Private WithEvents ts As TimerState
Private Const FinalTime As Double = 9.58
Private Sub UserForm_Initialize()
Command1.Caption = "Click to start timer"
Text1.Text = vbNullString
Text2.Text = vbNullString
Label1.Caption = "The fastest 100 meters ever run took this long:"
Set ts = New TimerState
End Sub
Private Sub Command1_Click()
Text1.Text = "From Now"
Text2.Text = "0"
ts.TimerTask FinalTime
End Sub
Private Sub ts_UpdateElapsedTime(ByVal elapsedTime As Double)
Text2.Text = CStr(Format(elapsedTime, "0.00"))
End Sub
Private Sub ts_DisplayFinalTime()
Text1.Text = "Until now"
Text2.Text = CStr(FinalTime)
End Sub
Le reste du code est situé dans un module de classe nommé TimerState. Parmi les commandes de ce module figurent les instructions Raise Event.
Option Explicit
Public Event UpdateElapsedTime(ByVal elapsedTime As Double)
Public Event DisplayFinalTime()
Private Const delta As Double = 0.01
Public Sub TimerTask(ByVal duration As Double)
Dim startTime As Double
startTime = Timer
Dim timeElapsedSoFar As Double
timeElapsedSoFar = startTime
Do While Timer < startTime + duration
If Timer - timeElapsedSoFar >= delta Then
timeElapsedSoFar = timeElapsedSoFar + delta
RaiseEvent UpdateElapsedTime(Timer - startTime)
DoEvents
End If
Loop
RaiseEvent DisplayFinalTime
End Sub
Voir aussi
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.