Partager via


Procédure pas à pas : déclaration et déclenchement d’événements (Visual Basic)

Cette procédure pas à pas montre comment déclarer et déclencher des événements pour une classe nommée Widget. Une fois les étapes terminées, vous pouvez lire la rubrique complémentaire, Procédure pas à pas : Gestion des événements, qui montre comment utiliser des événements à partir d’objets Widget pour fournir des informations d’état dans une application.

La classe Widget

Supposons pour le moment que vous avez une Widget classe. Votre Widget classe a une méthode qui peut prendre beaucoup de temps pour s’exécuter, et vous souhaitez que votre application puisse mettre en place un certain type d’indicateur d’achèvement.

Bien sûr, vous pouvez faire afficher à l’objet Widget une boîte de dialogue indiquant le pourcentage achevé, mais vous serez alors bloqué avec cette boîte de dialogue dans chaque projet dans lequel vous avez utilisé la classe Widget. Un bon principe de conception d’objet consiste à permettre à l’application qui utilise un objet de gérer l’interface utilisateur, sauf si l’objectif entier de l’objet est de gérer un formulaire ou une boîte de dialogue.

Le but de Widget est d'effectuer d'autres tâches, il est donc préférable d'ajouter un événement PercentDone et de laisser la procédure qui appelle les méthodes de Widget gérer cet événement et afficher les mises à jour de statut. L’événement PercentDone peut également fournir un mécanisme d’annulation de la tâche.

Pour générer l’exemple de code pour cette rubrique

  1. Ouvrez un projet d’application Windows Visual Basic et créez un formulaire nommé Form1.

  2. Ajoutez deux boutons et une étiquette à Form1.

  3. Nommez les objets comme indiqué dans le tableau suivant.

    Objet Propriété Réglage
    Button1 Text Démarrer la tâche
    Button2 Text Annuler
    Label (Name), Text lblPercentDone, 0
  4. Dans le menu Projet , choisissez Ajouter une classe pour ajouter une classe nommée Widget.vb au projet.

Pour déclarer un événement pour la classe Widget

  • Utilisez le Event mot clé pour déclarer un événement dans la Widget classe. Notez qu’un événement peut avoir ByVal et ByRef arguments, comme Widgetl’illustre l’événement PercentDone :

    Public Event PercentDone(ByVal Percent As Single,
                             ByRef Cancel As Boolean)
    

Lorsque l’objet appelant reçoit un PercentDone événement, l’argument Percent contient le pourcentage de la tâche terminée. L'argument Cancel peut être défini sur True afin d'annuler la méthode qui a déclenché l'événement.

Remarque

Vous pouvez déclarer des arguments d’événement comme vous le faites des arguments de procédures, à l’exception suivante : Les événements ne peuvent pas avoir Optional ou ParamArray arguments, et les événements n’ont pas de valeurs de retour.

L’événement PercentDone est déclenché par la LongTask méthode de la Widget classe. LongTask prend deux arguments : la durée pendant laquelle la méthode prétend faire du travail et l’intervalle de temps minimal avant LongTask de déclencher l’événement PercentDone .

Pour déclencher l’événement PercentDone

  1. Pour simplifier l’accès à la Timer propriété utilisée par cette classe, ajoutez une Imports instruction en haut de la section déclarations de votre module de classe, au-dessus de l’instruction Class Widget .

    Imports Microsoft.VisualBasic.DateAndTime
    
  2. Ajoutez le code suivant à la classe Widget :

    Public Sub LongTask(ByVal Duration As Single,
                        ByVal MinimumInterval As Single)
        Dim Threshold As Single
        Dim Start As Single
        Dim blnCancel As Boolean
    
        ' The Timer property of the DateAndTime object returns the seconds
        ' and milliseconds that have passed since midnight.
        Start = CSng(Timer)
        Threshold = MinimumInterval
    
        Do While CSng(Timer) < (Start + Duration)
            ' In a real application, some unit of work would
            ' be done here each time through the loop.
            If CSng(Timer) > (Start + Threshold) Then
                RaiseEvent PercentDone(
                Threshold / Duration, blnCancel)
                ' Check to see if the operation was canceled.
                If blnCancel Then Exit Sub
                Threshold = Threshold + MinimumInterval
            End If
        Loop
    End Sub
    

Lorsque votre application appelle la LongTask méthode, la Widget classe déclenche l’événement PercentDone toutes les MinimumInterval secondes. Lorsque l'événement revient, LongTask vérifie si l'argument Cancel a été défini à True.

Quelques exclusions de responsabilité sont nécessaires ici. Par souci de simplicité, la LongTask procédure suppose que vous savez à l’avance combien de temps la tâche prendra. C’est presque jamais le cas. La division des tâches en blocs de taille même peut être difficile, et souvent ce qui importe le plus aux utilisateurs est simplement le temps passé avant qu’ils obtiennent une indication que quelque chose se passe.

Vous avez peut-être détecté un autre défaut dans cet exemple. La Timer propriété retourne le nombre de secondes passées depuis minuit ; par conséquent, l’application est bloquée s’il est démarré juste avant minuit. Une approche plus prudente de la mesure du temps prendrait des conditions limites telles que celles-ci en considération, ou les éviterait complètement, à l’aide de propriétés telles que Now.

Maintenant que la Widget classe peut déclencher des événements, vous pouvez passer à la procédure pas à pas suivante. Procédure pas à pas : la gestion des événements montre comment associer WithEvents un gestionnaire d’événements à l’événement PercentDone .

Voir aussi