Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per usare le proprietà evento, definire le proprietà dell'evento nella classe che genera gli eventi e quindi impostare i delegati per le proprietà dell'evento nelle classi che gestiscono gli eventi. Per implementare più proprietà evento in una classe, la classe deve archiviare internamente e mantenere il delegato definito per ogni evento. Per ogni evento di tipo campo, viene generato un tipo di riferimento di campo sottostante corrispondente. Ciò può causare allocazioni non necessarie quando aumenta il numero di eventi. In alternativa, un approccio comune consiste nel gestire un EventHandlerList oggetto che archivia gli eventi in base alla chiave.
Per archiviare i delegati per ogni evento, puoi utilizzare la classe EventHandlerList o implementare la tua raccolta. La classe di raccolta deve fornire metodi per l'impostazione, l'accesso e il recupero del gestore delegato degli eventi in base alla chiave dell'evento. Ad esempio, è possibile usare una Hashtable classe o derivare una classe personalizzata dalla DictionaryBase classe . Non è necessario esporre i dettagli di implementazione della raccolta di delegati all'esterno della classe.
Ogni proprietà dell'evento all'interno della classe definisce un metodo accessor add e un metodo accessor remove. L'accessor add per una proprietà evento aggiunge l'istanza del delegato di input alla raccolta di delegati. L'accessore di rimozione per una proprietà evento rimuove l'istanza del delegato di input dalla raccolta di delegati. Le funzioni di accesso alle proprietà evento usano la chiave predefinita per la proprietà dell'evento per aggiungere e rimuovere istanze dalla raccolta di delegati.
Per gestire più eventi usando le proprietà degli eventi
Definire una raccolta di delegati all'interno della classe che genera gli eventi.
Definire una chiave per ogni evento.
Definire le proprietà dell'evento nella classe che genera gli eventi.
Utilizzare la raccolta di delegati per implementare i metodi accessor add e remove per le proprietà degli eventi.
Utilizzare le proprietà degli eventi pubblici per aggiungere e rimuovere delegati dei gestori degli eventi nelle classi che li gestiscono.
Esempio
L'esempio C# seguente implementa le proprietà dell'evento MouseDown e MouseUp, utilizzando un EventHandlerList per archiviare il delegato di ogni evento. Le parole chiave dei costrutti relativi alla proprietà dell'evento sono in grassetto.
// 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