Logo

Logo

domingo, 21 de febrero de 2016

1.4. Creación de eventos

Para la creación de eventos es necesario definir sobre que componente se desea crear dicho evento.


El siguiente ejemplo muestra una clase, ListWithChangedEvent, similar a la clase estándar ArrayList, pero también llama a un evento Changed cuando el contenido de la lista cambia. Una clase de propósito general como esa podría utilizarse de muchas formas en un programa extenso.

Por ejemplo, un procesador de textos podría mantener una lista de los documentos abiertos. Cuando la lista cambia, puede que sea necesario notificarlo a diferentes objetos del procesador de textos para poder actualizar la interfaz de usuario. Mediante el uso de eventos, el código que mantiene la lista de documentos no necesita saber quién necesita notificación (una vez que se cambia la lista de documentos, se llama automáticamente al evento y se notifica correctamente a todos los objetos que lo necesitan). Mediante el uso de eventos, la modularidad del programa se incrementa.

// events1.cs
using System;
namespace MyCollections
{
   using System.Collections;

   // A delegate type for hooking up change notifications.
   public delegate void ChangedEventHandler(object sender, EventArgs e);

   // A class that works just like ArrayList, but sends event
   // notifications whenever the list changes.
   public class ListWithChangedEvent: ArrayList
// An event that clients can use to be notified whenever the
      // elements of the list change.
      public event ChangedEventHandler Changed;

      // Invoke the Changed event; called whenever list changes
      protected virtual void OnChanged(EventArgs e)
      {
         if (Changed != null)
            Changed(this, e);
      }

      // Override some of the methods that can change the list;
      // invoke event after each
      public override int Add(object value)
      {
         int i = base.Add(value);
         OnChanged(EventArgs.Empty);
         return i;
      }

      public override void Clear()
      {
         base.Clear();
         OnChanged(EventArgs.Empty);
      }

      public override object this[int index]
      {
         set 
         List = list;
         // Add "ListChanged" to the Changed event on "List".
         List.Changed += new ChangedEventHandler(ListChanged);
      }

      // This will be called whenever the list changes.
      private void ListChanged(object sender, EventArgs e)
      {
         Console.WriteLine("This is called when the event fires.");
      }

      public void Detach()
      {
         // Detach the event and delete the list
         List.Changed -= new ChangedEventHandler(ListChanged);
         List = null;
      }
   }

   class Test
   {
      // Test the ListWithChangedEvent class.
      public static void Main()
      {
      // Create a new list.
      ListWithChangedEvent list = new ListWithChangedEvent();

Resultado

This is called when the event fires.This is called when the event fires.
Declaración de un evento; para declarar un evento dentro de una clase, primero debe declararse un tipo delegado para el evento si aún no existe uno declarado.
public delegate void ChangedEventHandler(object sender, EventArgs e);

El tipo delegado define el conjunto de argumentos que se pasan al método que realiza el tratamiento del evento. Varios eventos pueden compartir el mismo tipo delegado, de modo que este paso sólo es necesario si aún no se ha declarado ningún tipo delegado.

El tipo delegado define el conjunto de argumentos que se pasan al método que realiza el tratamiento del evento. Varios eventos pueden compartir el mismo tipo delegado, de modo que este paso sólo es necesario si aún no se ha declarado ningún tipo delegado.

Detectar pulsación de tecla Enter en C# - Evento KeyPress

No hay comentarios:

Publicar un comentario