Procédure pas à pas : déclaration et déclenchement des é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 d’objets Widget
pour fournir des informations status dans une application.
La classe Widget
Supposons pour le moment que vous ayez une classe Widget
. Votre classe Widget
a une méthode qui peut prendre beaucoup de temps à s’exécuter, et vous souhaitez que votre application puisse mettre en place un type d’indicateur d’achèvement.
Bien sûr, vous pouvez faire en sorte que l’objet Widget
affiche une boîte de dialogue de pourcentage complet, mais vous seriez 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 à laisser l’application qui utilise un objet gérer l’interface utilisateur, sauf si l’objet entier de l’objet est de gérer un formulaire ou une boîte de dialogue.
L’objectif de Widget
étant d’effectuer d’autres tâches, il est 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
Ouvrez un nouveau projet d'application Windows Visual Basic et créez un formulaire nommé
Form1
.Ajoutez deux boutons et une étiquette à
Form1
.Nommez les objets de la façon indiquée dans le tableau suivant.
Object Propriété Paramètre Button1
Text
Tâche de démarrage Button2
Text
Annuler Label
(Name)
,Text
lblPercentDone, 0 Dans le menu Projet, sélectionnez Ajouter une classe pour ajouter une classe
Widget.vb
au projet.
Pour déclarer un événement pour la classe Widget
Utilisez le mot clé
Event
pour déclarer un événement dans la classeWidget
. Notez qu’un événement peut avoir des argumentsByVal
etByRef
, comme l’événement deWidget
le montrePercentDone
:Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Lorsque l’objet appelant reçoit un événement PercentDone
, l’argument Percent
contient le pourcentage de la tâche terminée. L’argument Cancel
peut être défini sur True
pour annuler la méthode qui a déclenché l’événement.
Notes
Vous pouvez déclarer des arguments d’événement de la même manière que des arguments de procédures, avec les exceptions suivantes : les événements ne peuvent pas avoir d’arguments nommés, d’arguments Optional
ni d’arguments ParamArray
.
L'événement PercentDone
est déclenché par la méthode LongTask
de la classe Widget
. LongTask
prend deux arguments : la durée pendant laquelle la méthode prétend effectuer un travail et l’intervalle de temps minimal avant que LongTask
ne s’interrompt pour déclencher l’événement PercentDone
.
Pour déclencher l'événement PercentDone
Pour simplifier l’accès à la propriété
Timer
utilisée par cette classe, ajoutez une instructionImports
en haut de la section déclarations de votre module de classe, au-dessus de l’instructionClass Widget
.Imports Microsoft.VisualBasic.DateAndTime
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 méthodeLongTask
, la classe Widget
déclenche l’événement PercentDone
toutes les MinimumInterval
secondes. Lorsque l’événement est retourné, LongTask
vérifie si l’argument Cancel
a la valeur True
.
Quelques exclusions de responsabilité sont nécessaires ici. Par souci de simplicité, la procédure LongTask
suppose que vous savez à l’avance combien de temps la tâche prendra. Ce n’est presque jamais le cas. La division des tâches en blocs de taille égale peut être difficile, et souvent ce qui compte le plus pour les utilisateurs est simplement le temps qui passe 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 propriété Timer
retourne le nombre de secondes qui se sont écoulées depuis minuit ; par conséquent, l’application est bloquée si elle est démarrée juste avant minuit. Une approche plus prudente de la mesure du temps tiendrait compte des conditions limites telles que celle-ci, ou les éviterait complètement, à l’aide de propriétés telles que Now
.
Maintenant que la classe Widget
peut déclencher des événements, vous pouvez passer à la procédure pas à pas suivante. Procédure pas à pas : gestion des événements montre comment utiliser WithEvents
pour associer un gestionnaire d’événements à l’événement PercentDone
.