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_Loadou 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.

Voir aussi