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.
Sie können zwar ein Visual Studio-Projekt als eine Reihe von Prozeduren visualisieren, die in einer Sequenz ausgeführt werden, in Wirklichkeit sind die meisten Programme ereignisgesteuert , d. h. der Ausführungsfluss wird durch externe Vorkommen bestimmt, die als Ereignisse bezeichnet werden.
Ein Ereignis ist ein Signal, das eine Anwendung darüber informiert, dass etwas Wichtiges aufgetreten ist. Wenn ein Benutzer beispielsweise auf ein Steuerelement in einem Formular klickt, kann das Formular ein Click
Ereignis auslösen und eine Prozedur aufrufen, die das Ereignis behandelt. Ereignisse ermöglichen auch die Kommunikation separater Aufgaben. Angenommen, Ihre Anwendung führt eine Sortieraufgabe getrennt von der Hauptanwendung aus. Wenn ein Benutzer die Sortierung abbricht, kann ihre Anwendung ein Cancel-Ereignis senden, das den Sortiervorgang anweist, den Vorgang zu beenden.
Ereignisbegriffe und -konzepte
In diesem Abschnitt werden die Begriffe und Konzepte beschrieben, die mit Ereignissen in Visual Basic verwendet werden.
Deklarieren von Ereignissen
Sie deklarieren Ereignisse innerhalb von Klassen, Strukturen, Modulen und Schnittstellen mithilfe des Event
Schlüsselworts, wie im folgenden Beispiel gezeigt:
Event AnEvent(ByVal EventNumber As Integer)
Auslösen von Ereignissen
Ein Ereignis ist wie eine Meldung, die angibt, dass etwas Wichtiges aufgetreten ist. Das Senden der Nachricht wird als Auslösen des Ereignisses bezeichnet. In Visual Basic lösen Sie Ereignisse mit der RaiseEvent
Anweisung aus, wie im folgenden Beispiel gezeigt:
RaiseEvent AnEvent(EventNumber)
Ereignisse müssen innerhalb des Bereichs der Klasse, des Moduls oder der Struktur ausgelöst werden, in der sie deklariert werden. Eine abgeleitete Klasse kann z. B. keine ereignisse auslösen, die von einer Basisklasse geerbt wurden.
Ereignis-Absender
Jedes Objekt, das ein Ereignis auslösen kann, ist ein Ereignissender, auch bekannt als Ereignisquelle. Formulare, Steuerelemente und benutzerdefinierte Objekte sind Beispiele für Ereignis-Absender.
Ereignishandler
Ereignishandler sind Prozeduren , die aufgerufen werden, wenn ein entsprechendes Ereignis auftritt. Sie können eine beliebige gültige Unterroutine mit einer übereinstimmenden Signatur als Ereignishandler verwenden. Sie können eine Funktion jedoch nicht als Ereignishandler verwenden, da sie keinen Wert an die Ereignisquelle zurückgeben kann.
Visual Basic verwendet eine Standardbenennungskonvention für Ereignishandler, die den Namen des Ereignissenders, einen Unterstrich und den Namen des Ereignisses kombiniert. Das Click
-Ereignis einer Schaltfläche mit dem Namen button1
heißt beispielsweise Sub button1_Click
.
Hinweis
Es wird empfohlen, diese Benennungskonvention beim Definieren von Ereignishandlern für Ihre eigenen Ereignisse zu verwenden, dies ist jedoch nicht erforderlich. Sie können einen beliebigen gültigen Unterroutinenamen verwenden.
Verknüpfen von Ereignissen mit Ereignishandlern
Bevor ein Ereignishandler verwendet werden kann, müssen Sie ihn zuerst einem Ereignis zuordnen, indem Sie entweder die Handles
-Anweisung oder die AddHandler
-Anweisung verwenden.
WithEvents und die Handles-Klausel
Die WithEvents
Anweisung und Handles
Klausel bieten eine deklarative Methode zum Angeben von Ereignishandlern. Ein Ereignis, das von einem mit dem WithEvents
Schlüsselwort deklarierten Objekt ausgelöst wird, kann von jeder Prozedur mit einer Handles
Anweisung für dieses Ereignis behandelt werden, wie im folgenden Beispiel gezeigt:
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass
' Call the method that raises the object's events.
Sub TestEvents()
EClass.RaiseEvents()
End Sub
' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event.")
End Sub
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
Die WithEvents
Anweisung und die Handles
Klausel sind häufig die beste Wahl für Ereignishandler, da die von ihnen verwendete deklarative Syntax die Ereignisbehandlung für Code, Lesen und Debuggen vereinfacht. Beachten Sie jedoch die folgenden Einschränkungen bei der Verwendung von WithEvents
Variablen:
Sie können eine
WithEvents
Variable nicht als Objektvariable verwenden. Das heißt, Sie können sie nicht alsObject
deklarieren – Sie müssen den Klassennamen angeben, wenn Sie die Variable deklarieren.Da freigegebene Ereignisse nicht an Klasseninstanzen gebunden sind, können Sie
WithEvents
nicht verwenden, um freigegebene Ereignisse deklarativ zu behandeln. Ebenso können SieWithEvents
oderHandles
nicht verwenden, um Ereignisse von einemStructure
zu verarbeiten. In beiden Fällen können Sie dieAddHandler
Anweisung verwenden, um diese Ereignisse zu behandeln.Sie können keine Arrays von
WithEvents
Variablen erstellen.
WithEvents
Variablen ermöglichen es einem einzelnen Ereignishandler, einen oder mehrere Ereignisarten zu behandeln, oder einen oder mehrere Ereignishandler, um dieselbe Art von Ereignis zu behandeln.
Obwohl die Handles
Klausel die Standardmethode zum Zuordnen eines Ereignisses zu einem Ereignishandler ist, ist sie auf das Zuordnen von Ereignissen mit Ereignishandlern zur Kompilierungszeit beschränkt.
In einigen Fällen, z. B. mit Ereignissen, die Formularen oder Steuerelementen zugeordnet sind, führt Visual Basic automatisch einen leeren Ereignishandler aus und ordnet ihn einem Ereignis zu. Wenn Sie beispielsweise auf eine Befehlsschaltfläche in einem Formular im Entwurfsmodus doppelklicken, erstellt Visual Basic einen leeren Ereignishandler und eine WithEvents
Variable für die Befehlsschaltfläche, wie im folgenden Code:
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click() Handles Button1.Click
End Sub
AddHandler und RemoveHandler
Die AddHandler
Anweisung ähnelt der Handles
Klausel darin, dass beide es ermöglichen, einen Ereignishandler festzulegen. Wird jedoch AddHandler
in Verbindung mit RemoveHandler
eingesetzt, bietet dies eine größere Flexibilität als die Handles
-Klausel, sodass Sie den einem Ereignis zugeordneten Ereignishandler dynamisch hinzufügen, entfernen und ändern können. Wenn Sie freigegebene Ereignisse oder Ereignisse aus einer Struktur behandeln möchten, müssen Sie AddHandler
verwenden.
AddHandler
benötigt zwei Argumente: den Namen eines Ereignisses von einem Ereignissender (z.B. einem Steuerelement) und einen Ausdruck, der einen Delegaten ergibt. Sie müssen die Delegatenklasse bei Verwendung AddHandler
nicht explizit angeben, da die AddressOf
Anweisung immer einen Verweis auf den Delegaten zurückgibt. Im folgenden Beispiel wird ein Ereignishandler einem Ereignis zugeordnet, das von einem Objekt ausgelöst wird:
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
RemoveHandler
, das ein Ereignis von einem Ereignishandler trennt, verwendet dieselbe Syntax wie AddHandler
. Beispiel:
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
Im folgenden Beispiel wird ein Ereignishandler einem Ereignis zugeordnet, und das Ereignis wird ausgelöst. Der Ereignishandler fängt das Ereignis ab und zeigt eine Meldung an.
Anschließend wird der erste Ereignishandler entfernt, und dem Ereignis wird ein anderer Ereignishandler zugeordnet. Wenn das Ereignis erneut ausgelöst wird, wird eine andere Meldung angezeigt.
Schließlich wird der zweite Ereignishandler entfernt, und das Ereignis wird ein drittes Mal ausgelöst. Da dem Ereignis kein Ereignishandler mehr zugeordnet ist, wird keine Aktion ausgeführt.
Module Module1
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler c1.AnEvent, AddressOf EventHandler1
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler c1.AnEvent, AddressOf EventHandler2
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler2
' This event will not be handled.
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
Public Class Class1
' Declare an event.
Public Event AnEvent()
Sub CauseTheEvent()
' Raise an event.
RaiseEvent AnEvent()
End Sub
End Class
End Module
Behandeln von Ereignissen, die von einer Basisklasse geerbt wurden
Abgeleitete Klassen – Klassen, die Merkmale von einer Basisklasse erben – können Ereignisse behandeln, die von ihrer Basisklasse mithilfe der Handles MyBase
Anweisung ausgelöst werden.
So behandeln Sie Ereignisse aus einer Basisklasse
Deklarieren Sie einen Ereignishandler in der abgeleiteten Klasse, indem Sie der Deklarationszeile der Ereignishandlerprozedur eine
Handles MyBase.
Ereignisnameanweisung hinzufügen, wobei "eventname " der Name des Ereignisses in der basisklasse ist, die Sie behandeln. Beispiel:Public Class BaseClass Public Event BaseEvent(ByVal i As Integer) ' Place methods and properties here. End Class Public Class DerivedClass Inherits BaseClass Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent ' Place code to handle events from BaseClass here. End Sub End Class
Verwandte Abschnitte
Titel | BESCHREIBUNG |
---|---|
Anleitung: Deklarieren und Auslösen von Ereignissen | Enthält eine schrittweise Beschreibung der Deklaration und des Auslösens von Ereignissen für eine Klasse. |
Anleitung: Umgang mit Ereignissen | Veranschaulicht, wie eine Ereignishandlerprozedur geschrieben wird. |
Vorgehensweise: Deklarieren von benutzerdefinierten Ereignissen, um die Blockierung zu vermeiden | Veranschaulicht, wie ein benutzerdefiniertes Ereignis definiert wird, mit dem seine Ereignishandler asynchron aufgerufen werden können. |
Vorgehensweise: Deklarieren von benutzerdefinierten Ereignissen zum Sparen von Arbeitsspeicher | Veranschaulicht, wie ein benutzerdefiniertes Ereignis definiert wird, das nur Speicher verwendet, wenn das Ereignis behandelt wird. |
Problembehandlung für geerbte Ereignishandler in Visual Basic | Listet häufige Probleme auf, die mit Ereignishandlern in geerbten Komponenten auftreten. |
Ereignisse | Bietet eine Übersicht über das Ereignismodell in .NET Framework. |
Erstellen von Ereignishandlern in Windows Forms | Beschreibt das Arbeiten mit Ereignissen, die Windows Forms-Objekten zugeordnet sind. |
Delegierte | Bietet eine Übersicht über Delegaten in Visual Basic. |