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