System (Espacio de nombres)


Biblioteca de clases de .NET Framework
EventHandler<(Of <(TEventArgs>)>) (Delegado)

Actualización: noviembre 2007

Representa el método que controlará un evento.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)
Sintaxis

Visual Basic (Declaración)
<SerializableAttribute> _
Public Delegate Sub EventHandler(Of TEventArgs As EventArgs) ( _
    sender As Object, _
    e As TEventArgs _
)
Visual Basic (Uso)
Dim instance As New EventHandler(Of TEventArgs)(AddressOf HandlerMethod)
C#
[SerializableAttribute]
public delegate void EventHandler<TEventArgs>(
    Object sender,
    TEventArgs e
)
where TEventArgs : EventArgs
Visual C++
[SerializableAttribute]
generic<typename TEventArgs>
where TEventArgs : EventArgs
public delegate void EventHandler(
    Object^ sender, 
    TEventArgs e
)
J#
J# admite el uso de APIs genéricas pero no admite la declaración de nuevas API.
JScript
JScript no admite el uso de métodos ni tipos genéricos.

Parámetros de tipo

TEventArgs

Tipo de los datos de evento generados por el evento.

Parámetros

sender
Tipo: System..::.Object
Origen del evento.
e
Tipo: TEventArgs
EventArgs que contiene los datos de eventos.
Comentarios

El modelo de evento de .NET Framework se basa en la existencia de un delegado de eventos que conecte un evento a su controlador. Para provocar un evento, se requieren dos elementos:

  • Delegado que hace referencia a un método que proporciona la respuesta al evento.

  • Clase que contiene los datos de eventos.

El delegado es un tipo que define una firma; es decir, el tipo del valor devuelto y los tipos de la lista de parámetros de un método. Puede utilizar el tipo delegado para declarar una variable que puede hacer referencia a cualquier método con la misma firma que el delegado.

La firma estándar del delegado de un controlador de eventos define un método que no devuelve ningún valor, cuyo primer parámetro es de tipo Object y hace referencia a la instancia que provoca el evento, y cuyo segundo parámetro se deriva del tipo EventArgs y contiene los datos de eventos. Si el evento no genera datos de eventos, el segundo parámetro es tan sólo una instancia de EventArgs. De lo contrario, el segundo parámetro es un tipo personalizado derivado de EventArgs y que proporciona los campos o propiedades necesarios para contener los datos de eventos.

EventHandler<(Of <(TEventArgs>)>) es un delegado predefinido que representa un método controlador de un evento, independientemente de si el evento genera datos de eventos o no. Si el evento no genera datos de eventos, sustituya el parámetro de tipo genérico por EventArgs; en caso contrario, utilice su propio tipo de datos de eventos personalizado para sustituir el parámetro de tipo genérico.

La ventaja de utilizar EventHandler<(Of <(TEventArgs>)>) es que no necesita codificar su propio delegado personalizado si el evento genera datos de eventos. Además, .NET Framework sólo necesita una implementación para poder utilizar EventHandler<(Of <(TEventArgs>)>), independientemente del tipo de datos de eventos que utilice para sustituir el parámetro de tipo genérico.

Para asociar el evento al método que lo controlará, agregue una instancia del delegado al evento. Siempre que se produzca el evento, se llamará a su controlador, a menos que se quite el delegado.

Para obtener más información acerca de delegados del controlador de eventos, vea Eventos y delegados.

Ejemplos

El ejemplo de código siguiente declara datos de eventos y un delegado de EventHandler<(Of <(TEventArgs>)>) genérico que utiliza estos datos y muestra cómo se provoca el evento.

Visual Basic
' This example demonstrates the EventHandler(Of T) delegate.
Imports System
Imports System.Collections.Generic

'---------------------------------------------------------
Public Class MyEventArgs
   Inherits EventArgs
   Private msg As String

   Public Sub New(messageData As String)
      msg = messageData
   End Sub 'New

   Public Property Message() As String
      Get
         Return msg
      End Get
      Set
         msg = value
      End Set
   End Property
End Class 'MyEventArgs 
'---------------------------------------------------------
Public Class HasEvent
   ' Declare an event of delegate type EventHandler of 
   ' MyEventArgs.
   Public Event SampleEvent As EventHandler(Of MyEventArgs)

   Public Sub DemoEvent(val As String)
      RaiseEvent SampleEvent(Me, New MyEventArgs(val))
   End Sub 'DemoEvent
End Class 'HasEvent 
'---------------------------------------------------------
Public Class Sample
   Public Shared Sub Main()
      Dim he As New HasEvent()
      AddHandler he.SampleEvent, AddressOf SampleEventHandler
      he.DemoEvent("Hey there, Bruce!")
      he.DemoEvent("How are you today?")
      he.DemoEvent("I'm pretty good.")
      he.DemoEvent("Thanks for asking!")
   End Sub 'Main

   Private Shared Sub SampleEventHandler(src As Object, _
                                         mea As MyEventArgs)
      Console.WriteLine(mea.Message)
   End Sub 'SampleEventHandler
End Class 'Sample
'---------------------------------------------------------
'
'This example produces the following results:
'
'Hey there, Bruce!
'How are you today?
'I'm pretty good.
'Thanks for asking!
'
C#
// This example demonstrates the EventHandler<T> delegate.

using System;
using System.Collections.Generic;

//---------------------------------------------------------
public class MyEventArgs : EventArgs
{
    private string msg;

    public MyEventArgs( string messageData ) {
        msg = messageData;
    }
    public string Message { 
        get { return msg; } 
        set { msg = value; }
    }
}
//---------------------------------------------------------
public class HasEvent
{
// Declare an event of delegate type EventHandler of 
// MyEventArgs.

    public event EventHandler<MyEventArgs> SampleEvent;

    public void DemoEvent(string val)
    {
    // Copy to a temporary variable to be thread-safe.
        EventHandler<MyEventArgs> temp = SampleEvent;
        if (temp != null)
            temp(this, new MyEventArgs(val));
    }
}
//---------------------------------------------------------
public class Sample
{
    public static void Main()
    {
        HasEvent he = new HasEvent();
        he.SampleEvent += 
                   new EventHandler<MyEventArgs>(SampleEventHandler);
        he.DemoEvent("Hey there, Bruce!");
        he.DemoEvent("How are you today?");
        he.DemoEvent("I'm pretty good.");
        he.DemoEvent("Thanks for asking!");
    }
    private static void SampleEventHandler(object src, MyEventArgs mea)
    {
        Console.WriteLine(mea.Message);
    }
}
//---------------------------------------------------------
/*
This example produces the following results:

Hey there, Bruce!
How are you today?
I'm pretty good.
Thanks for asking!

*/
Plataformas

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Información de versión

.NET Framework

Compatible con: 3.5, 3.0, 2.0

.NET Compact Framework

Compatible con: 3.5, 2.0

XNA Framework

Compatible con: 2.0, 1.0
Vea también

Referencia

Otros recursos

Etiquetas :


Page view tracker