Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser exemplarischen Vorgehensweise wird das Deklarieren und Auslösen von Ereignissen für eine Klasse mit dem Namen veranschaulicht Widget. Nachdem Sie die Schritte abgeschlossen haben, sollten Sie das Begleitthema " Walkthrough: Handling Events" lesen, das zeigt, wie Ereignisse aus Widget Objekten verwendet werden, um Statusinformationen in einer Anwendung bereitzustellen.
Die Widget-Klasse
Gehen Sie für den Moment davon aus, dass Sie eine Widget Klasse haben. Ihre Widget Klasse verfügt über eine Methode, die eine lange Ausführung dauern kann, und Sie möchten, dass ihre Anwendung eine Art Abschlussanzeige erstellen kann.
Natürlich könnten Sie veranlassen, dass das Widget-Objekt ein Dialogfeld mit dem prozentualen Abschlussstatus anzeigt, aber dann hätten Sie dieses Dialogfeld in jedem Projekt, in dem Sie die Widget-Klasse verwendet haben. Ein gutes Prinzip des Objektentwurfs besteht darin, dass die Anwendung, die ein Objekt verwendet, die Benutzeroberfläche steuert — es sei denn, der gesamte Zweck des Objekts besteht darin, ein Formular oder Dialogfeld zu verwalten.
Der Zweck Widget besteht darin, andere Aufgaben auszuführen, sodass es besser ist, ein PercentDone Ereignis hinzuzufügen und die Prozedur, die die Methoden aufruft Widget, dieses Ereignis behandeln und Statusaktualisierungen anzeigen zu lassen. Das PercentDone Ereignis kann auch einen Mechanismus zum Abbrechen der Aufgabe bereitstellen.
So erstellen Sie das Codebeispiel für dieses Thema
Öffnen Sie ein neues Visual Basic Windows Application-Projekt, und erstellen Sie ein Formular mit dem Namen
Form1.Fügen Sie zwei Schaltflächen und eine Beschriftung hinzu.
Form1Benennen Sie die Objekte wie in der folgenden Tabelle dargestellt.
Objekt Eigentum Konfiguration Button1TextAufgabe starten Button2TextAbbrechen Label(Name),TextlblPercentDone, 0 Wählen Sie im Menü "Projekt " die Option " Klasse hinzufügen" aus, um dem Projekt eine Klasse hinzuzufügen, die dem Projekt benannt ist
Widget.vb.
So deklarieren Sie ein Ereignis für die Widget-Klasse
Verwenden Sie das
EventSchlüsselwort, um ein Ereignis in derWidgetKlasse zu deklarieren. Beachten Sie, dass ein EreignisByValundByRefArgumente haben kann, wie dasWidget-PercentDone-Ereignis zeigt:Public Event PercentDone(ByVal Percent As Single, ByRef Cancel As Boolean)
Wenn das aufrufende Objekt ein PercentDone Ereignis empfängt, enthält das Percent Argument den Prozentsatz der abgeschlossenen Aufgabe. Das Cancel-Argument kann auf True gesetzt werden, um die Methode abzubrechen, die das Ereignis ausgelöst hat.
Hinweis
Sie können Ereignisargumente genauso deklarieren wie Argumente von Prozeduren, mit den folgenden Ausnahmen: Ereignisse können nicht über Optional Argumente oder ParamArray Argumente verfügen, und Ereignisse haben keine Rückgabewerte.
Das PercentDone Ereignis wird von der LongTask Methode der Widget Klasse ausgelöst.
LongTask verwendet zwei Argumente: die Zeitdauer, die die Methode benötigt, um vorzutäuschen, dass sie arbeitet, und das minimale Zeitintervall, bevor LongTask pausiert, um das PercentDone Ereignis auszulösen.
So lösen Sie das PercentDone-Ereignis aus
Um den Zugriff auf die
Timervon dieser Klasse verwendete Eigenschaft zu vereinfachen, fügen Sie oben im Deklarationsbereich des Klassenmoduls oberhalb derImportsAnweisung eineClass WidgetAnweisung hinzu.Imports Microsoft.VisualBasic.DateAndTimeFügen Sie der
Widget-Klasse folgenden Code hinzu: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
Wenn Ihre Anwendung die LongTask Methode aufruft, löst die Widget Klasse das PercentDone Ereignis alle MinimumInterval Sekunden aus. Wenn das Ereignis zurückgegeben wird, überprüft LongTask, ob das Cancel-Argument auf True gesetzt wurde.
Hier sind einige Haftungsausschlüsse erforderlich. Aus Gründen der Einfachheit geht das LongTask Verfahren davon aus, dass Sie im Voraus wissen, wie lange die Aufgabe dauern wird. Dies ist fast nie der Fall. Das Aufteilen von Aufgaben in Blöcke gleichmäßiger Größe kann schwierig sein, und häufig ist es für Benutzer am wichtigsten, einfach die Zeitspanne wahrzunehmen, die vergeht, bevor sie einen Hinweis darauf erhalten, dass etwas passiert.
Möglicherweise haben Sie in diesem Beispiel einen weiteren Fehler entdeckt. Die Timer Eigenschaft gibt die Anzahl der Sekunden zurück, die seit Mitternacht vergangen sind. Daher bleibt die Anwendung stehen, wenn sie kurz vor Mitternacht gestartet wird. Ein sorgfältigerer Ansatz zur Zeitmessung würde Grenzbedingungen wie diese berücksichtigen oder sie ganz vermeiden, indem Eigenschaften wie Now verwendet werden.
Nachdem die Widget Klasse Ereignisse auslösen kann, können Sie zur nächsten Anleitung wechseln.
Walkthrough: Handling Events zeigt, wie man mit WithEvents einen Ereignishandler mit dem PercentDone-Ereignis verknüpft.