Ereignisse und Ereignishandler

Aktualisiert: November 2007

Sie können sich ein Visual Studio-Projekt als eine Reihe von Prozeduren vorstellen, die nacheinander ausgeführt werden, doch sind die meisten Programme tatsächlich ereignisgesteuert. Das bedeutet, dass der Ausführungsablauf von externen Vorkommnissen bestimmt wird, die als Ereignisse bezeichnet werden.

Ein Ereignis ist ein Signal, das eine Anwendung darüber informiert, dass etwas Wichtiges geschehen ist. Wenn der Benutzer beispielsweise auf ein Steuerelement in einem Formular klickt, löst das Formular ein Click-Ereignis aus und ruft eine Prozedur auf, die das Ereignis behandelt. Darüber hinaus ermöglichen Ereignisse die Kommunikation zwischen separaten Aufgaben. Beispiel: Die Anwendung führt separat von der Hauptanwendung eine Sortieraufgabe aus. Wenn ein Benutzer den Sortiervorgang abbricht, kann die Anwendung ein Cancel-Ereignis senden, das den Abbruch des Sortiervorgangs veranlasst.

Begriffe und Konzepte im Zusammenhang mit Ereignissen

In diesem Abschnitt werden die in Visual Basic im Zusammenhang mit Ereignissen verwendeten Begriffe und Konzepte erläutert.

Deklarieren von Ereignissen

Ereignisse werden innerhalb von Klassen, Strukturen, Modulen und Schnittstellen mithilfe des Event-Schlüsselworts deklariert, wie im folgenden Beispiel dargestellt:

Event AnEvent(ByVal EventNumber As Integer)

Auslösen von Ereignissen

Ein Ereignis ist mit einer Nachricht vergleichbar, die bekannt gibt, dass etwas Wichtiges geschehen 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 dargestellt:

RaiseEvent AnEvent(EventNumber)

Ereignisse müssen im Gültigkeitsbereich der Klasse, des Moduls oder der Struktur ausgelöst werden, in der sie deklariert wurden. So kann beispielsweise eine abgeleitete Klasse keine Ereignisse auslösen, die von einer Basisklasse geerbt wurden.

Ereignissender

Jedes Objekt, das in der Lage ist, ein Ereignis auszulösen, ist ein Ereignissender (auch Ereignisquelle genannt). Formulare, Steuerelemente und benutzerdefinierte Objekte sind Beispiele für Ereignissender.

Ereignishandler

Ereignishandler sind Prozeduren, die aufgerufen werden, wenn ein entsprechendes Ereignis auftritt. Als Ereignishandler kann jede gültige Unterroutine mit einer übereinstimmenden Signatur verwendet werden. Funktionen können nicht als Ereignishandler verwendet werden, da sie keinen Wert an die Ereignisquelle zurückgeben können.

Visual Basic verwendet eine standardmäßige Benennungskonvention für Ereignishandler. Danach besteht der Name aus dem Namen des Ereignissenders, einem Unterstrich und dem Namen des Ereignisses. Das Click-Ereignis einer Schaltfläche mit dem Namen button1 heißt beispielsweise Sub button1_Click.

Hinweis:

Die Verwendung dieser Benennungskonvention wird für die Definition von Ereignishandlern für eigene Ereignisse empfohlen, ist jedoch nicht erforderlich. Sie können stattdessen auch einen gültigen Unterroutinennamen verwenden.

Verknüpfen von Ereignissen mit Ereignishandlern

Bevor ein Ereignishandler verwendet werden kann, müssen sie ihn über die Handles-Anweisung oder die AddHandler-Anweisung mit einem Ereignis verknüpfen.

Die WithEvents-Anweisung und die Handles-Klausel bieten die Möglichkeit, Ereignishandler per Deklaration festzulegen. Ereignisse, die durch ein mit WithEvents deklariertes Objekt ausgelöst werden, können von jeder Unterroutine mit einer Handles-Klausel behandelt werden, die dieses Ereignis benennt. Die Handles-Klausel ist zwar das Standardverfahren zum Verknüpfen eines Ereignisses mit einem Ereignishandler, ist jedoch dennoch auf das Verknüpfen von Ereignissen mit Ereignishandlern während der Kompilierung beschränkt.

Die Anweisungen AddHandler und RemoveHandler sind flexibler als die Handles-Klausel. Sie können damit die Ereignisse dynamisch mit einem oder mehreren Ereignishandlern zur Laufzeit verknüpfen bzw. die Verknüpfung aufheben, und Sie müssen dabei keine Objektvariablen mit WithEvents deklarieren. Für die Verwendung von WithEvents gelten jedoch einige Einschränkungen. Weitere Informationen finden Sie unter WithEvents und die Handles-Klausel.

In einigen Fällen, z. B. bei Ereignissen, die Formularen oder Steuerelementen zugeordnet sind, erstellt Visual Basic automatisch einen Stub für einen leeren Ereignishandler und ordnet ihn einem Ereignis zu. Wenn Sie z. B. im Entwurfsmodus auf eine Befehlsschaltfläche doppelklicken, erstellt Visual Basic einen leeren Ereignishandler und eine WithEvents-Variable für die Befehlsschaltfläche (siehe folgenden Code):

Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click(ByVal sender As System.Object, _
   ByVal e As System.EventArgs) Handles Button1.Click
End Sub

Siehe auch

Aufgaben

Gewusst wie: Schreiben von Ereignishandlern

Konzepte

AddHandler und RemoveHandler

WithEvents und die Handles-Klausel

Referenz

Handles

AddHandler-Anweisung