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.
Deklariert ein benutzerdefiniertes Ereignis.
Syntax
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
[ <attrlist> ] AddHandler(ByVal value As delegatename)
[ statements ]
End AddHandler
[ <attrlist> ] RemoveHandler(ByVal value As delegatename)
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
Bestandteile
| Teil | BESCHREIBUNG |
|---|---|
attrlist |
Wahlfrei. Liste der Attribute, die für dieses Ereignis gelten. Mehrere Attribute werden durch Kommas getrennt. Sie müssen die Attributliste in winkelige Klammern ("<" und ">") einschließen. |
accessmodifier |
Wahlfrei. Gibt an, welcher Code auf das Ereignis zugreifen kann. Dabei kann es sich um eine der folgenden Methoden handeln: - Öffentlich – jeder Code, der auf das Element zugreifen kann, das es deklariert, kann darauf zugreifen. - Geschützt – nur Code innerhalb seiner Klasse oder einer abgeleiteten Klasse kann darauf zugreifen. - Friend – nur Code in derselben Assembly kann darauf zugreifen. - Privat – nur Code im Element, das es deklariert, kann darauf zugreifen. - Geschützter Friend-only-Code in der Klasse des Ereignisses, einer abgeleiteten Klasse oder derselben Assembly kann darauf zugreifen. - Privater geschützter Code in der Klasse des Ereignisses oder einer abgeleiteten Klasse in derselben Assembly kann darauf zugreifen. |
Shared |
Wahlfrei. Gibt an, dass dieses Ereignis keiner bestimmten Instanz einer Klasse oder Struktur zugeordnet ist. |
Shadows |
Wahlfrei. Gibt an, dass dieses Ereignis ein identisch benanntes Programmierelement oder einen Satz überladener Elemente in einer Basisklasse neu deklariert und ausgeblendet. Sie können jede Art deklarierter Elemente mit jeder anderen Art abschatten. Ein abgeschattetes Element ist nicht innerhalb der abgeleiteten Klasse verfügbar, die es schattiert, es sei denn, auf den Schattenelement kann nicht zugegriffen werden. Wenn z. B. ein Element ein Private Basisklassenelement schattiert, greift Code, der nicht über die Berechtigung zum Zugriff auf das Private Element verfügt, stattdessen auf das Basisklassenelement zu. |
eventname |
Erforderlich. Name des Ereignisses; folgt standardbenennungskonventionen für Variablen. |
parameterlist |
Wahlfrei. Liste der lokalen Variablen, die die Parameter dieses Ereignisses darstellen. Sie müssen die Parameterliste in Klammern einschließen. |
Implements |
Wahlfrei. Gibt an, dass dieses Ereignis ein Ereignis einer Schnittstelle implementiert. |
implementslist |
Erforderlich, wenn Implements angegeben. Liste der Sub implementierten Verfahren. Mehrere Prozeduren werden durch Kommas getrennt:implementedprocedure [ , implementiertProcedure ... ] Jede implementedprocedure weist die folgende Syntax und Teile auf:interface.definedname- interface -Erforderlich. Name einer Schnittstelle, die diese Prozedur enthält, die Klasse oder Struktur enthält, wird implementiert.- Definedname -Erforderlich. Name, in dem die Prozedur definiert interfaceist. Dies muss nicht mit dem Namen identisch namesein, den diese Prozedur zum Implementieren der definierten Prozedur verwendet. |
Custom |
Erforderlich. Ereignisse, die deklariert werden, Custom müssen benutzerdefinierte AddHandler, RemoveHandlerund RaiseEvent Accessoren definieren. |
delegatename |
Wahlfrei. Der Name eines Delegaten, der die Ereignishandlersignatur angibt. |
AddHandler |
Erforderlich. Deklariert einen AddHandler Accessor, der die auszuführenden Anweisungen angibt, wenn ein Ereignishandler hinzugefügt wird, entweder explizit mithilfe der AddHandler Anweisung oder implizit mithilfe der Handles Klausel. |
End AddHandler |
Erforderlich. Beendet den AddHandler Block. |
value |
Erforderlich. Parametername. |
RemoveHandler |
Erforderlich. Deklariert einen RemoveHandler Accessor, der die auszuführenden Anweisungen angibt, wenn ein Ereignishandler mithilfe der RemoveHandler Anweisung entfernt wird. |
End RemoveHandler |
Erforderlich. Beendet den RemoveHandler Block. |
RaiseEvent |
Erforderlich. Deklariert einen RaiseEvent Accessor, der die auszuführenden Anweisungen angibt, wenn das Ereignis mithilfe der RaiseEvent Anweisung ausgelöst wird. In der Regel ruft dies eine Liste der Stellvertretungen auf, die von den Und-Accessoren AddHandlerRemoveHandler verwaltet werden. |
End RaiseEvent |
Erforderlich. Beendet den RaiseEvent Block. |
delegatesignature |
Erforderlich. Liste der Parameter, die den parametern entsprechen, die vom delegatename Delegaten benötigt werden. Sie müssen die Parameterliste in Klammern einschließen. |
statements |
Wahlfrei. Anweisungen, die die Körper der AddHandler, RemoveHandlerund RaiseEvent Methoden enthalten. |
End Event |
Erforderlich. Beendet den Event Block. |
Bemerkungen
Nachdem das Ereignis deklariert wurde, verwenden Sie die RaiseEvent Anweisung, um das Ereignis auszuheben. Ein typisches Ereignis kann deklariert und ausgelöst werden, wie in den folgenden Fragmenten gezeigt:
Public Class EventSource
' Declare an event.
Public Event LogonCompleted(ByVal UserName As String)
Sub CauseEvent()
' Raise an event on successful logon.
RaiseEvent LogonCompleted("AustinSteele")
End Sub
End Class
Hinweis
Sie können Ereignisargumente genauso wie Argumente von Prozeduren deklarieren, mit den folgenden Ausnahmen: Ereignisse können keine benannten Argumente, ParamArray Argumente oder Optional Argumente haben. Ereignisse haben keine Rückgabewerte.
Zum Behandeln eines Ereignisses müssen Sie es einer Ereignishandlerunterroutine mithilfe der oder der Handles Anweisung AddHandler zuordnen. Die Signaturen der Unterroutine und des Ereignisses müssen übereinstimmen. Zum Behandeln eines freigegebenen Ereignisses müssen Sie die AddHandler Anweisung verwenden.
Sie können nur auf Modulebene verwenden Event . Dies bedeutet, dass der Deklarationskontext für ein Ereignis eine Klasse, Struktur, ein Modul oder eine Schnittstelle sein muss und keine Quelldatei, ein Namespace, eine Prozedur oder ein Block sein kann. Weitere Informationen finden Sie unter Deklarationskontexte und Standardzugriffsebenen.
In den meisten Fällen können Sie die erste Syntax im Abschnitt "Syntax" dieses Themas zum Deklarieren von Ereignissen verwenden. Einige Szenarien erfordern jedoch, dass Sie mehr Kontrolle über das detaillierte Verhalten des Ereignisses haben. Die letzte Syntax im Abschnitt "Syntax" dieses Themas, die das Custom Schlüsselwort verwendet, stellt dieses Steuerelement bereit, indem Sie benutzerdefinierte Ereignisse definieren können. In einem benutzerdefinierten Ereignis geben Sie genau an, was geschieht, wenn Code einen Ereignishandler zu oder aus dem Ereignis hinzufügt oder daraus entfernt, oder wenn Code das Ereignis auslöst. Beispiele finden Sie unter How to: Declare Custom Events To Conserve Memory and How to: Declare Custom Events To Avoid Blocking.
Beispiel
Im folgenden Beispiel werden Ereignisse verwendet, um Sekunden von 10 auf 0 zu zählen. Der Code veranschaulicht mehrere ereignisbezogene Methoden, Eigenschaften und Anweisungen. Dies schließt die RaiseEvent Anweisung ein.
Die Klasse, die ein Ereignis auslöst, ist die Ereignisquelle, und die Methoden, die das Ereignis verarbeiten, sind die Ereignishandler. Eine Ereignisquelle kann über mehrere Handler für die von ihr generierten Ereignisse verfügen. Wenn die Klasse das Ereignis auslöst, wird dieses Ereignis für jede Klasse ausgelöst, die sich für die Behandlung von Ereignissen für diese Instanz des Objekts ausgewählt hat.
Im Beispiel wird auch ein Formular (Form1) mit einer Schaltfläche (Button1) und einem Textfeld () verwendetTextBox1. Wenn Sie auf die Schaltfläche klicken, zeigt das erste Textfeld einen Countdown von 10 bis 0 Sekunden an. Wenn die Vollzeitzeit (10 Sekunden) abgelaufen ist, wird im ersten Textfeld "Fertig" angezeigt.
Der Code für Form1 die Angabe der Anfangs- und Terminalzustände des Formulars. Er enthält zudem den Code, der ausgeführt wird, wenn Ereignisse aufgerufen werden.
Um dieses Beispiel zu verwenden, öffnen Sie ein neues Windows Forms-Projekt. Fügen Sie dann eine Schaltfläche mit dem Namen Button1 und ein Textfeld hinzu, das dem Hauptformular mit dem Namen benannt TextBox1 ist Form1. Klicken Sie dann mit der rechten Maustaste auf das Formular, und klicken Sie auf "Code anzeigen ", um den Code-Editor zu öffnen.
Fügen Sie dem Deklarationsbereich der Form1 Klasse eine WithEvents Variable hinzu:
Public Class TimerExample
Private WithEvents mTimer As TimerState
Fügen Sie den folgenden Code zum Code für Form1. Ersetzen Sie doppelte Prozeduren, die vorhanden sein können, z Form_Load . B. oder Button_Click.
Public Sub StartCountdownExample()
mTimer = New TimerState()
mTimer.StartCountdown(10.0, 1.0)
End Sub
Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
End Sub
Private Sub mTimer_Finished() Handles mTimer.Finished
Console.WriteLine("Done")
End Sub
End Class
Public Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim SoFar As Double = 0
Do While SoFar < Duration
System.Threading.Thread.Sleep(CInt(Increment * 1000))
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
Loop
RaiseEvent Finished()
End Sub
End Class
Drücken Sie F5, um das vorherige Beispiel auszuführen, und klicken Sie auf die Schaltfläche mit der Bezeichnung "Start". Das erste Textfeld beginnt, die Sekunden nach unten zu zählen. Wenn die Vollzeitzeit (10 Sekunden) abgelaufen ist, wird im ersten Textfeld "Fertig" angezeigt.
Hinweis
Die My.Application.DoEvents Methode verarbeitet keine Ereignisse auf die gleiche Weise wie das Formular. Damit das Formular die Ereignisse direkt behandeln kann, können Sie Multithreading verwenden. Weitere Informationen finden Sie unter "Verwalteter Threading".
Siehe auch
- RaiseEvent-Anweisung
- Implements-Anweisung
- Ereignisse
- AddHandler-Anweisung
- RemoveHandler-Anweisung
- Handles
- Delegierten-Erklärung
- Vorgehensweise: Deklarieren von benutzerdefinierten Ereignissen zum Sparen von Arbeitsspeicher
- Vorgehensweise: Deklarieren von benutzerdefinierten Ereignissen, um die Blockierung zu vermeiden
- Shared
- Schatten