Share via


Gewusst wie: Behandeln mehrerer Ereignisse mit Ereigniseigenschaften

Aktualisiert: November 2007

Zur Verwendung von Ereigniseigenschaften (benutzerdefinierte Ereignisse in Visual Basic 2005) müssen Sie die Ereigniseigenschaften in der Klasse definieren, die die Ereignisse auslöst. Anschließend müssen Sie die Delegaten für die Ereigniseigenschaften in den Klassen festlegen, die die Ereignisse behandeln. Zum Implementieren mehrerer Ereigniseigenschaften in einer Klasse muss die Klasse den für jedes Ereignis definierten Delegaten intern speichern und verwalten. Ein typischer Ansatz ist, eine Delegatauflistung zu implementieren, die von einem Ereignisschlüssel indiziert wird.

Zum Speichern der Delegaten für jedes Ereignis können Sie die EventHandlerList-Klasse verwenden oder eine eigene Auflistung implementieren. Die Auflistungsklasse muss Methoden für das Festlegen, Aufrufen und Abrufen des Ereignishandlerdelegaten auf der Grundlage des Ereignisschlüssels bereitstellen. Zum Beispiel könnten Sie eine Hashtable-Klasse verwenden oder eine benutzerdefinierte Klasse von der DictionaryBase-Klasse ableiten. Die Implementierungsdetails der Delegatauflistung müssen nicht außerhalb der Klasse verfügbar gemacht werden.

Jede Ereigniseigenschaft innerhalb der Klasse definiert eine add-Accessor-Methode und eine remove-Accessor-Methode. Der add-Accessor für eine Ereigniseigenschaft fügt die Eingabedelegatinstanz der Delegatauflistung hinzu. Der remove-Accessor für eine Ereigniseigenschaft entfernt die Eingabedelegatinstanz aus der Delegatauflistung. Die Accessoren für Ereigniseigenschaften verwenden den vordefinierten Schlüssel für die Ereigniseigenschaft, um Instanzen der Delegatauflistung hinzuzufügen bzw. daraus zu entfernen.

So behandeln Sie mehrere Ereignisse mit Ereigniseigenschaften

  1. Definieren Sie eine Delegatauflistung innerhalb der Klasse, die die Ereignisse auslöst.

  2. Definieren Sie einen Schlüssel für jedes Ereignis.

  3. Definieren Sie die Ereigniseigenschaften in der Klasse, die die Ereignisse auslöst.

  4. Verwenden Sie die Delegatauflistung, um die add- und die remove-Accessor-Methode für die Ereigniseigenschaften zu implementieren.

  5. Verwenden Sie die öffentlichen Ereigniseigenschaften, um Ereignishandlerdelegaten in den Klassen, die die Ereignisse auslösen, hinzuzufügen und zu entfernen.

Beispiel

Das folgende C#-Beispiel implementiert die MouseDown-Ereigniseigenschaft und die MouseUp-Ereigniseigenschaft unter Verwendung einer EventHandlerList, um den Delegat jedes Ereignisses zu speichern. Die Schlüsselwörter der Eigenschaftenkonstrukte für Ereignisse sind fett dargestellt.

Hinweis:

Ereigniseigenschaften werden in Visual Basic 2005 nicht unterstützt.

// 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); }
   }

   // 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); }
   }
}

Siehe auch

Aufgaben

Gewusst wie: Deklarieren von Ereignissen, die Speicherplatz sparen

Konzepte

Auslösen mehrerer Ereignisse

Referenz

System.ComponentModel.EventHandlerList

System.Web.UI.Control.Events

Weitere Ressourcen

Behandeln und Auslösen von Ereignissen