Esta documentación está archivada y no tiene mantenimiento.

Cómo: Controlar varios eventos mediante propiedades de eventos

Para poder utilizar propiedades de evento (eventos personalizados de Visual Basic 2005), hay que definirlas en la clase que provoca los eventos y, a continuación, establecer los delegados de las propiedades de evento en las clases que controlan los eventos. Para implementar varias propiedades de evento en una clase, esta clase deberá almacenar internamente y mantener el delegado definido para cada evento. Para hacerlo, uno de los enfoques típicos consiste en implementar una colección de delegados que se indice por medio de una clave de evento.

Para almacenar los delegados de cada evento, puede utilizar la clase EventHandlerList o implementar su propia colección. La clase de colección debe proporcionar métodos para establecer, obtener acceso y recuperar el delegado del controlador de eventos basándose en la clave del evento. Por ejemplo, se puede utilizar una clase Hashtable o derivar una clase personalizada a partir de la clase DictionaryBase. No es necesario exponer los detalles de implementación de la colección de delegados fuera de la clase.

Cada una de las propiedades de evento de la clase define un método de descriptor de acceso add y un método de descriptor de acceso remove. El descriptor de acceso add de una propiedad de evento agrega la instancia de delegado de entrada a la colección de delegados. El descriptor de acceso remove de una propiedad de evento elimina la instancia de delegado de entrada de la colección de delegados. Los descriptores de acceso de las propiedades de eventos utilizan la clave predefinida de la propiedad de evento para agregar y eliminar instancias en la colección de delegados.

Para controlar varios eventos mediante las propiedades de evento

  1. Defina una colección de delegados dentro de la clase que provoca los eventos.

  2. Defina una clave para cada evento.

  3. Defina las propiedades de evento de la clase que provoca los eventos.

  4. Utilice la colección de delegados para implementar los métodos de descriptor de acceso add y remove de las propiedades de evento.

  5. Utilice las propiedades de evento públicas para agregar y quitar delegados de controlador de eventos en las clases que controlan los eventos.

Ejemplo

En el siguiente ejemplo de C#, se implementan las propiedades de evento MouseDown y MouseUp mediante el uso de EventHandlerList para almacenar el delegado de cada evento. Las palabras clave de las construcciones de propiedades de evento están en negrita.

NoteNota

Estas propiedades no se admiten en Visual Basic 2005.

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

Vea también

Mostrar: