RaiseEvent, instruction

Mise à jour : novembre 2007

Déclenche un événement déclaré au niveau module dans une classe, un formulaire ou un document.

RaiseEvent eventname[( argumentlist )]

Éléments

  • eventname
    Obligatoire. Nom de l'événement à déclencher.

  • argumentlist
    Facultatif. Liste délimitée par des virgules énumérant des variables, des tableaux ou des expressions. L'argument argumentlist doit être mis entre parenthèses. En cas d'absence d'argument, les parenthèses doivent être supprimées.

Notes

Le paramètre eventname requis correspond au nom d'un événement déclaré dans le module. Il suit les conventions d'affectation de nom de 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 de l'é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 générer des événements qui ne sont pas déclarés de façon explicite 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 événement Click dans le module formulaire, celui-ci occulte l'événement Click appartenant au 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 en Visual Basic déclenche ses gestionnaires d'événements suivant l'ordre dans lequel les connexions sont établies. Dans la mesure où les événements peuvent comporter des paramètres ByRef, un processus qui se connecte ultérieurement peut recevoir des paramètres ayant été modifiés par un gestionnaire d'événements précédent. Une fois que les gestionnaires d'événements s'exécutent, le contrôle est retourné à la sous-routine qui a déclenché l'événement.

Remarque :

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 de tels événements ne causent pas d'erreurs à l'exécution, ils peuvent ne pas être détectés par des gestionnaires d'événements associés. Utilisez le modificateur Shared pour créer un événement partagé si vous avez besoin de déclencher un événement à partir d'un constructeur.

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 Event, instruction.

Exemple

L'exemple suivant utilise des événements pour commencer le compte à rebours des secondes de 10 à 0. Le code illustre de nombreuses méthodes, propriétés et instructions relatives 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 des gestionnaires multiples pour les événements qu'elle génère. Lorsque la classe génère l'événement, celui-ci se produit pour chaque classe ayant choisi de gérer les événements pour cette instance de l'objet.

Cet exemple utilise aussi un formulaire (Form1) comportant un bouton (Button1) et une zone de texte (TextBox1). Lorsque vous cliquez sur le bouton, la première zone affiche un compte à rebours de 10 à 0 secondes. Lorsque 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 appelé Button1 et une zone de texte appelée TextBox1 au formulaire principal appelé 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 des déclarations de la classe Form1.

Private WithEvents mText As TimerState

Ajoutez le code suivant au code pour Form1. Remplacez toute procédure en double éventuelle, telle que Form_Load ou Button_Click.

Private Sub Form1_Load(ByVal sender As Object, _
                       ByVal e As System.EventArgs) _
                       Handles MyBase.Load
    Button1.Text = "Start"
    mText = New TimerState
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) _
                          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 Démarrer. La première zone de texte commence le compte à rebours des secondes. Lorsque la durée totale (10 secondes) s'est écoulée, la première zone de texte affiche « Terminé ».

Remarque :

La méthode My.Application.DoEvents ne traite pas les événements exactement de la même manière que le formulaire. Pour permettre au formulaire de gérer les événements directement, vous pouvez utiliser le multithreading. Pour plus d'informations, consultez Multithreading dans Visual Basic.

Voir aussi

Tâches

Comment : ajouter des événements à une classe

Référence

Event, instruction

AddHandler, instruction

RemoveHandler, instruction

Handles

Autres ressources

Événements en Visual Basic