Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
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 Button1TextDémarrer la tâche Button2TextAnnuler Label(Name),TextlblPercentDone, 0 Dans le menu Projet , choisissez Ajouter une classe pour ajouter une classe nommée
Widget.vbau projet.
Pour déclarer un événement pour la classe Widget
Utilisez le
Eventmot clé pour déclarer un événement dans laWidgetclasse. Notez qu’un événement peut avoirByValetByRefarguments, commeWidgetl’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
Timerpropriété utilisée par cette classe, ajoutez uneImportsinstruction en haut de la section déclarations de votre module de classe, au-dessus de l’instructionClass Widget.Imports Microsoft.VisualBasic.DateAndTimeAjoutez 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 .