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.
Um Ereigniseigenschaften zu verwenden, definieren Sie die Ereigniseigenschaften in der Klasse, die die Ereignisse auslöst, und legen dann die Delegaten für die Ereigniseigenschaften in Klassen fest, die die Ereignisse behandeln. Um mehrere Ereigniseigenschaften in einer Klasse zu implementieren, sollte die Klasse den für jedes Ereignis definierten Delegaten intern speichern und verwalten. Für jedes feldähnliche Ereignis wird ein entsprechender Hintergrundfeld-Verweistyp generiert. Dies kann zu unnötigen Zuordnungen führen, wenn die Anzahl der Ereignisse steigt. Als Alternative besteht ein häufiger Ansatz darin, ein EventHandlerList, das Ereignisse nach Schlüssel speichert, beizubehalten.
Um die Stellvertretungen für jedes Ereignis zu speichern, können Sie die EventHandlerList Klasse verwenden oder Ihre eigene Sammlung implementieren. Die Sammlungsklasse muss Methoden zum Festlegen, Zugreifen und Abrufen des Ereignishandlerdelegats basierend auf dem Ereignisschlüssel bereitstellen. Sie können z. B. eine Hashtable Klasse verwenden oder eine benutzerdefinierte Klasse von der DictionaryBase Klasse ableiten. Die Implementierungsdetails der Delegatensammlung müssen nicht außerhalb Ihrer Klasse offengelegt werden.
Jede Ereigniseigenschaft innerhalb der Klasse definiert eine add-Zugriffsmethode und eine remove-Zugriffsmethode. Der Add-Accessor für eine Ereigniseigenschaft fügt der Delegatensammlung die Eingabedelegatinstanz hinzu. Der Remove-Accessor für eine Ereigniseigenschaft entfernt die Eingabedelegatinstanz aus der Delegatensammlung. Die Accessoren der Ereigniseigenschaft verwenden den vordefinierten Schlüssel der Ereigniseigenschaft, um Instanzen zur Delegatensammlung hinzuzufügen oder daraus zu entfernen.
So behandeln Sie mehrere Ereignisse mithilfe von Ereigniseigenschaften
Definieren Sie eine Delegatenauflistung innerhalb der Klasse, die die Ereignisse auslöst.
Definieren Sie einen Schlüssel für jedes Ereignis.
Definieren Sie die Ereigniseigenschaften in der Klasse, die die Ereignisse auslöst.
Verwenden Sie die Delegatenauflistung, um die Methoden zum Hinzufügen und Entfernen von Accessor für die Ereigniseigenschaften zu implementieren.
Verwenden Sie die öffentlichen Ereigniseigenschaften, um Ereignishandlerdelegaten in den Klassen hinzuzufügen und zu entfernen, die die Ereignisse behandeln.
Beispiel
Das folgende C#-Beispiel implementiert die Ereigniseigenschaften MouseDown
und MouseUp
, indem ein EventHandlerList zur Speicherung des Delegaten jedes Ereignisses verwendet wird. Die Schlüsselwörter der Ereigniseigenschaftskonstrukte sind fettgedruckt.
// The class SampleControl defines two event properties, MouseUp and MouseDown.
class SampleControl : Component
{
// :
// Define other control methods and properties.
// :
// Define the delegate collection.
protected EventHandlerList listEventDelegates = new EventHandlerList();
// Define a unique key for each event.
static readonly object mouseDownEventKey = new object();
static readonly object mouseUpEventKey = new object();
// Define the MouseDown event property.
public event MouseEventHandler MouseDown
{
// Add the input delegate to the collection.
add
{
listEventDelegates.AddHandler(mouseDownEventKey, value);
}
// Remove the input delegate from the collection.
remove
{
listEventDelegates.RemoveHandler(mouseDownEventKey, value);
}
}
// Raise the event with the delegate specified by mouseDownEventKey
private void OnMouseDown(MouseEventArgs e)
{
MouseEventHandler mouseEventDelegate =
(MouseEventHandler)listEventDelegates[mouseDownEventKey];
mouseEventDelegate(this, e);
}
// Define the MouseUp event property.
public event MouseEventHandler MouseUp
{
// Add the input delegate to the collection.
add
{
listEventDelegates.AddHandler(mouseUpEventKey, value);
}
// Remove the input delegate from the collection.
remove
{
listEventDelegates.RemoveHandler(mouseUpEventKey, value);
}
}
// Raise the event with the delegate specified by mouseUpEventKey
private void OnMouseUp(MouseEventArgs e)
{
MouseEventHandler mouseEventDelegate =
(MouseEventHandler)listEventDelegates[mouseUpEventKey];
mouseEventDelegate(this, e);
}
}
' The class SampleControl defines two event properties, MouseUp and MouseDown.
Class SampleControl
Inherits Component
' :
' Define other control methods and properties.
' :
' Define the delegate collection.
Protected listEventDelegates As New EventHandlerList()
' Define a unique key for each event.
Shared ReadOnly mouseDownEventKey As New Object()
Shared ReadOnly mouseUpEventKey As New Object()
' Define the MouseDown event property.
Public Custom Event MouseDown As MouseEventHandler
' Add the input delegate to the collection.
AddHandler(Value As MouseEventHandler)
listEventDelegates.AddHandler(mouseDownEventKey, Value)
End AddHandler
' Remove the input delegate from the collection.
RemoveHandler(Value As MouseEventHandler)
listEventDelegates.RemoveHandler(mouseDownEventKey, Value)
End RemoveHandler
' Raise the event with the delegate specified by mouseDownEventKey
RaiseEvent(sender As Object, e As MouseEventArgs)
Dim mouseEventDelegate As MouseEventHandler = _
listEventDelegates(mouseDownEventKey)
mouseEventDelegate(sender, e)
End RaiseEvent
End Event
' Define the MouseUp event property.
Public Custom Event MouseUp As MouseEventHandler
' Add the input delegate to the collection.
AddHandler(Value As MouseEventHandler)
listEventDelegates.AddHandler(mouseUpEventKey, Value)
End AddHandler
' Remove the input delegate from the collection.
RemoveHandler(Value As MouseEventHandler)
listEventDelegates.RemoveHandler(mouseUpEventKey, Value)
End RemoveHandler
' Raise the event with the delegate specified by mouseDownUpKey
RaiseEvent(sender As Object, e As MouseEventArgs)
Dim mouseEventDelegate As MouseEventHandler = _
listEventDelegates(mouseUpEventKey)
mouseEventDelegate(sender, e)
End RaiseEvent
End Event
End Class