Freigeben über


Übersicht über Ereignisse

Bei einem Ereignis handelt es sich um eine Aktion, auf die Sie im Code reagieren oder "behandeln" können. Ereignisse werden in der Regel von einer Benutzeraktion generiert, z. B. durch Klicken auf die Maus oder durch Drücken einer Taste, aber sie können auch durch Programmcode oder vom System generiert werden.

Ereignisgesteuerte Anwendungen führen Code als Reaktion auf ein Ereignis aus. Jedes Formular und jedes Steuerelement macht einen vordefinierten Satz von Ereignissen verfügbar, auf den Sie reagieren können. Wenn eines dieser Ereignisse ausgelöst wird und ein zugeordneter Ereignishandler vorhanden ist, wird der Handler aufgerufen und Code ausgeführt.

Die Typen von Ereignissen, die von einem Objekt ausgelöst werden, variieren, aber viele Typen sind für die meisten Steuerelemente üblich. Die meisten Objekte verfügen beispielsweise über ein Click Ereignis, das ausgelöst wird, wenn ein Benutzer darauf klickt.

Hinweis

Viele Ereignisse treten mit anderen Ereignissen auf. Beispielsweise treten im Verlauf des DoubleClick-Ereignisses die MouseDown, MouseUp und Click-Ereignisse auf.

Allgemeine Informationen zum Auslösen und Nutzen eines Ereignisses finden Sie unter Behandeln und Auslösen von Ereignissen in .NET.

Stellvertretungen und deren Rolle

Delegaten sind Klassen, die in .NET häufig zur Implementierung von Ereignisbehandlungsmechanismen verwendet werden. Stellvertretungen entsprechen ungefähr Funktionszeigern, die häufig in Visual C++ und anderen objektorientierten Sprachen verwendet werden. Im Gegensatz zu Funktionszeigern sind Delegaten objektorientiert, typsicher und sicher. Wenn ein Funktionszeiger nur einen Verweis auf eine bestimmte Funktion enthält, besteht ein Delegat aus einem Verweis auf ein Objekt und verweisen auf eine oder mehrere Methoden innerhalb des Objekts.

Dieses Ereignismodell verwendet Delegaten, um Ereignisse an die Methoden zu binden, die sie verarbeiten. Der Delegat ermöglicht es anderen Klassen, sich für ereignisbenachrichtigungen zu registrieren, indem eine Handlermethode angegeben wird. Wenn das Ereignis auftritt, ruft der Delegate die gebundene Methode auf. Weitere Informationen zum Definieren von Stellvertretungen finden Sie unter Behandeln und Auslösen von Ereignissen.

Stellvertretungen können an eine einzelne Methode oder an mehrere Methoden gebunden werden, die als Multicasting bezeichnet werden. Beim Erstellen eines Delegaten für ein Ereignis erstellen Sie in der Regel ein Multicastereignis. Eine seltene Ausnahme kann ein Ereignis sein, das zu einer bestimmten Prozedur führt (z. B. das Anzeigen eines Dialogfelds), das nicht logisch mehrmals pro Ereignis wiederholt würde. Informationen darüber, wie Sie einen Multicast-Delegaten erstellen, finden Sie unter Delegaten kombinieren (Multicast-Delegaten).

Ein Multicastdelegat verwaltet eine Aufrufliste der Methoden, an die er gebunden ist. Der Multicastdelegat unterstützt eine Combine Methode, um eine Methode zur Aufrufliste hinzuzufügen und eine Remove Methode, um sie zu entfernen.

Wenn ein Ereignis von der Anwendung aufgezeichnet wird, löst das Steuerelement das Ereignis aus, indem es den Delegaten für dieses Ereignis aufruft. Der Delegat ruft wiederum die gebundene Methode auf. Im häufigsten Fall (ein Multicastdelegat) ruft der Delegat jede gebundene Methode in der Aufrufliste auf, was eine Eins-zu-viele-Benachrichtigung bereitstellt. Diese Strategie bedeutet, dass das Steuerelement keine Liste der Zielobjekte für die Ereignisbenachrichtigung verwalten muss – der Delegat behandelt alle Registrierungen und Benachrichtigungen.

Delegaten ermöglichen außerdem, dass mehrere Ereignisse an dieselbe Methode gebunden werden können, wodurch eine Benachrichtigung von vielen auf einen möglich ist. Beispielsweise kann ein Schaltflächenklickereignis und ein Menübefehl-Click-Ereignis denselben Delegat aufrufen, der dann eine einzelne Methode aufruft, um diese separaten Ereignisse auf die gleiche Weise zu behandeln.

Der bindungsmechanismus, der mit Delegaten verwendet wird, ist dynamisch: Ein Delegat kann zur Laufzeit an jede Methode gebunden werden, deren Signatur mit der des Ereignishandlers übereinstimmt. Mit diesem Feature können Sie die gebundene Methode je nach Bedingung einrichten oder ändern und einen Ereignishandler dynamisch an ein Steuerelement anfügen.

Ereignisse in Windows Forms

Ereignisse in Windows Forms werden mit dem EventHandler<TEventArgs> Delegat für Handlermethoden deklariert. Jeder Ereignishandler stellt zwei Parameter bereit, mit denen Sie das Ereignis ordnungsgemäß behandeln können. Das folgende Beispiel zeigt einen Ereignishandler für das Ereignis eines Button Steuerelements Click .

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

End Sub
private void button1_Click(object sender, System.EventArgs e)
{

}

Der erste Parametersender stellt einen Verweis auf das Objekt bereit, das das Ereignis ausgelöst hat. Der zweite Parameter eübergibt ein Objekt, das für das Ereignis spezifisch ist, das behandelt wird. Durch Verweisen auf die Eigenschaften des Objekts (und manchmal auch deren Methoden) können Sie Informationen abrufen, z. B. die Position der Maus für Mausereignisse oder Daten, die in Drag-and-Drop-Ereignissen übertragen werden.

In der Regel erzeugt jedes Ereignis einen Ereignishandler mit einem anderen Ereignisobjekttyp für den zweiten Parameter. Einige Ereignishandler, wie die für die MouseDown- und MouseUp-Ereignisse, haben denselben Objekttyp als zweiten Parameter. Für diese Ereignistypen können Sie denselben Ereignishandler verwenden, um beide Ereignisse zu behandeln.

Sie können auch denselben Ereignishandler verwenden, um dasselbe Ereignis für verschiedene Steuerelemente zu behandeln. Wenn Sie beispielsweise über eine Gruppe von RadioButton Steuerelementen in einem Formular verfügen, können Sie einen einzelnen Ereignishandler für das Click Ereignis jedes RadioButtonFormulars erstellen. Weitere Informationen finden Sie unter Umgang mit einem Steuerelementereignis.