RaiseEvent, instruction
Déclenche un événement déclaré au niveau du module au sein d’une classe, d’un formulaire ou d’un document.
Syntaxe
RaiseEvent eventname[( argumentlist )]
Éléments
eventname
Obligatoire. Nom de l’événement à déclencher.
argumentlist
Optionnel. Liste délimitée par des virgules de variables, de tableaux ou d’expressions. L’argument argumentlist
doit être placé entre parenthèses. S’il n’y a pas d’argument, les parenthèses sont omises.
Notes
Le nom requis eventname
est le nom d’un événement déclaré dans le module. Il suit les conventions d’affectation de noms des variables Visual Basic.
Si l’événement n’a pas été déclaré dans le module dans lequel il est déclenché, une erreur se produit. Le fragment de code suivant illustre une déclaration d’événement et une procédure dans laquelle l’événement est déclenché.
' Declare an event at module level.
Event LogonCompleted(ByVal UserName As String)
Sub Logon(ByVal UserName As String)
' Raise the event.
RaiseEvent LogonCompleted(UserName)
End Sub
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, tous les formulaires héritent d’un événement Click de System.Windows.Forms.Form, il ne peut pas être déclenché à l’aide de RaiseEvent
dans un formulaire dérivé. Si vous déclarez un Click
événement dans le module de formulaire, il met en mémoire fantôme l’événement du Click formulaire. Vous pouvez toujours appeler l’événement Click du formulaire en appelant la méthode OnClick .
Par défaut, un événement défini dans Visual Basic déclenche ses gestionnaires d’événements dans l’ordre dans lequel les connexions sont é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. Une fois les gestionnaires d’événements exécutés, le contrôle est retourné à la sous-routine qui a déclenché l’événement.
Notes
Les événements non partagés ne doivent pas être déclenchés dans le constructeur de la classe dans laquelle ils sont déclarés. Bien que ces événements ne provoquent pas d’erreurs d’exécution, ils peuvent ne pas être interceptés par les gestionnaires d’événements associés. Utilisez le modificateur Shared
pour créer un événement partagé si vous devez déclencher un événement à partir d’un constructeur.
Notes
Vous pouvez modifier le comportement par défaut des événements en définissant un événement personnalisé. Pour les événements personnalisés, l’instruction RaiseEvent
appelle l’accesseur RaiseEvent
de l’événement. Pour plus d’informations sur les événements personnalisés, consultez instruction d’événement.
Exemple 1
L'exemple suivant utilise des événements pour décompter les secondes de 10 à 0. Le code illustre plusieurs méthodes, propriétés et instructions liées aux événements, y compris l’instruction RaiseEvent
.
La classe qui déclenche un événement est la source de l'événement, et les méthodes qui traitent l'événement sont les gestionnaires d'événements. Une source d'événement peut avoir plusieurs gestionnaires pour les événements qu'elle génère. Quand la classe déclenche l'événement, celui-ci se produit pour chaque classe ayant choisi de gérer les événements pour cette instance de l'objet.
L'exemple utilise également un formulaire (Form1
) avec un bouton (Button1
) et une zone de texte (TextBox1
). Quand vous cliquez sur le bouton, la première zone de texte affiche un compte à rebours de 10 à 0 secondes. Quand la durée totale (10 secondes) s'est écoulée, la première zone de texte affiche « Terminé ».
Le code correspondant à Form1
indique les états de début et de fin du formulaire. Il contient également le code exécuté lors du déclenchement des événements.
Pour utiliser cet exemple, ouvrez un nouveau projet d’application Windows, ajoutez un bouton nommé Button1
et une zone de texte nommée TextBox1
au formulaire principal, nommé Form1
. Cliquez ensuite avec le bouton droit sur le formulaire, puis cliquez sur Afficher le code pour ouvrir l’Éditeur de code.
Ajoutez une variable WithEvents
à la section de déclarations de la classe Form1
.
Private WithEvents mText As TimerState
Exemple 2
Ajoutez le code suivant au code pour Form1
. Remplacez les procédures en double qui peuvent exister, telles que Form_Load
ou Button_Click
.
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Private Sub mText_ChangeText() Handles mText.Finished
TextBox1.Text = "Done"
End Sub
Private Sub mText_UpdateTime(ByVal Countdown As Double
) Handles mText.UpdateTime
TextBox1.Text = Format(Countdown, "##0.0")
' Use DoEvents to allow the display to refresh.
My.Application.DoEvents()
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Dim SoFar As Double = 0
Do While ElapsedTime < Duration
If ElapsedTime > SoFar + Increment Then
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
End If
ElapsedTime = DateAndTime.Timer - Start
Loop
RaiseEvent Finished()
End Sub
End Class
Appuyez sur F5 pour exécuter l’exemple précédent, puis cliquez sur le bouton intitulé Démarrer. La première zone de texte commence à décompter les secondes. Quand la durée totale (10 secondes) s'est écoulée, la première zone de texte affiche « Terminé ».
Notes
La méthode My.Application.DoEvents
ne traite pas exactement les événements de la même façon que le formulaire. Pour permettre au formulaire de gérer directement les événements, vous pouvez utiliser le multithreading. Pour plus d'informations, consultez Modèles gérés.