Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
Ouvrez un projet d’application Windows Visual Basic et créez un formulaire nommé
Form1
.Ajoutez deux boutons et une étiquette à
Form1
.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 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 laWidget
classe. Notez qu’un événement peut avoirByVal
etByRef
arguments, commeWidget
l’illustre l’événementPercentDone
: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
Pour simplifier l’accès à la
Timer
propriété utilisée par cette classe, ajoutez uneImports
instruction 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 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
.