Evaluar y enviar comentarios
MSDN
MSDN Library
System
 EventHandler(TEventArgs) (Delegado)
Contraer todo/Expandir todo Contraer todo
Esta página es específica de
Microsoft Visual Studio 2010/.NET Framework 4

Hay además otras versiones disponibles para:
Biblioteca de clases de .NET Framework
EventHandler<(Of <(TEventArgs>)>) (Delegado)

Representa el método que controlará un evento.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)
Visual Basic
<SerializableAttribute> _
Public Delegate Sub EventHandler(Of TEventArgs As EventArgs) ( _
    sender As Object, _
    e As TEventArgs _
)
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
)
F#
[<SerializableAttribute>]
type EventHandler = 
    delegate of 
        sender:Object * 
        e:'TEventArgs -> unit

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
Control EventArgs que contiene los datos del evento.

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 generar 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 genera 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 proporciona los campos o las propiedades necesarias para contener los datos de evento.

EventHandler<(Of <(TEventArgs>)>) es un delegado predefinido que representa un método de control de eventos para 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á, hay que agregar 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 sobre los delegados del controlador de eventos, vea Eventos y delegados.

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.

Observe que la versión de Visual C++ del ejemplo proporciona el acceso seguro para subprocesos automáticamente, permitiéndole generar el evento directamente. Por consiguiente, el código de ejemplo de Visual C++ no le exige la creación de una variable temporal segura para subprocesos en contraste con los ejemplos de Visual Basic y C#.

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!

*/
Visual C++
// This example demonstrates the EventHandler<T> delegate.

using namespace System;
using namespace System::Collections::Generic;

//---------------------------------------------------------
public ref class MyEventArgs: public EventArgs
{
private:
   String^ msg;

public:
   MyEventArgs( String^ messageData )
   { msg = messageData; }

   property String^ Message 
   {
      String^ get()
      { return msg; }

      void set( String^ value )
      { msg = value; }
   }
};

public ref class HasEvent
{
public:
   event EventHandler< MyEventArgs^ >^ SampleEvent;

   // Declare an event of delegate type EventHandler of MyEventArgs.
   void DemoEvent( String^ val )
   {
   //  The CPP compiler automatically provides threadsafe access,
   //  which allows you to raise the event directly:

       SampleEvent(this, gcnew MyEventArgs(val));
   }
};

public ref class Sample
{
public:
   static void TestHandler()
   {
      HasEvent^ he = gcnew HasEvent;
      he->SampleEvent += gcnew EventHandler< MyEventArgs^ >( SampleEventHandler );
      he->DemoEvent( L"Hey there, Bruce!" );
      he->DemoEvent( L"How are you today?" );
      he->DemoEvent( L"I'm pretty good." );
      he->DemoEvent( L"Thanks for asking!" );
   }
private:
   static void SampleEventHandler( Object^ src, MyEventArgs^ mea )
   {
      Console::WriteLine( mea->Message );
   }
};

int main() {
    Sample::TestHandler();
}

//---------------------------------------------------------
/*
This example produces the following results:

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

.NET Framework

Compatible con: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Compatible con:

Windows 7, Windows Vista SP1 o posterior, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (no se admite Server Core), Windows Server 2008 R2 (se admite Server Core con SP1 o posterior), Windows Server 2003 SP2

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Contenido de la comunidad   ¿Qué es Community Content?
Agregar contenido nuevo RSS  Anotaciones
Processing
© 2012 Microsoft. Reservados todos los derechos. Términos de uso | Marcas Registradas | Privacidad
Page view tracker