Compartir a través de


AddHandler (instrucción)

Asocia un evento a un controlador de eventos en tiempo de ejecución.

Sintaxis

AddHandler event, {AddressOf eventhandler | expression }

Partes

Parte Descripción
event Nombre del evento que se va a controlar.
eventhandler Nombre de un procedimiento que controla el evento.
expression Expresión lambda que controla el evento.

Las partes AddressOf eventhandler y expression son mutuamente excluyentes.

Observaciones

Las AddHandler instrucciones y RemoveHandler permiten iniciar y detener el control de eventos en cualquier momento durante la ejecución del programa.

La firma del nuevo controlador de eventos (el eventhandler procedimiento o la expression expresión lambda) debe coincidir con la firma del evento event.

La Handles palabra clave y la AddHandler instrucción permiten especificar que determinados procedimientos controlan eventos concretos, pero existen diferencias. La AddHandler instrucción conecta procedimientos a eventos en tiempo de ejecución. Use la Handles palabra clave al definir un procedimiento para especificar que controla un evento determinado. Para obtener más información, consulte Handles(Identificadores).

Un controlador agregado con una expresión lambda explícita no se puede quitar más adelante (mediante RemoveHandler). De hecho, si la expresión lambda no tiene un nombre, no es posible hacer referencia a ella más adelante. Pero asignar la expresión lambda a una variable y agregar el controlador a través de esta variable permite quitar el controlador mediante esta variable.

Nota:

Para eventos personalizados, la AddHandler instrucción invoca el descriptor de acceso del AddHandler evento. Para obtener más información sobre los eventos personalizados, vea Event Statement.

Ejemplo

En el ejemplo siguiente se muestra cómo usar AddHandler con ConvertEventHandler delegados para escenarios de enlace de datos. En este ejemplo se muestra un caso de uso práctico en el que los controladores de eventos se adjuntan a Format eventos y Parse de un Binding objeto para convertir entre valores decimales y cadenas de moneda.

Public Class DataBindingExample
    Private textBox1 As TextBox
    Private ds As DataSet
    
    Public Sub New()
        textBox1 = New TextBox()
        ds = New DataSet()
        SetupSampleData()
        BindControlWithAddHandler()
    End Sub
    
    Private Sub SetupSampleData()
        Dim table As New DataTable("Orders")
        table.Columns.Add("OrderAmount", GetType(Decimal))
        table.Rows.Add(123.45D)
        table.Rows.Add(67.89D)
        ds.Tables.Add(table)
    End Sub
    
    Private Sub BindControlWithAddHandler()
        Dim binding As New Binding("Text", ds, "Orders.OrderAmount")
        
        ' Use AddHandler to associate ConvertEventHandler delegates
        AddHandler binding.Format, AddressOf DecimalToCurrency
        AddHandler binding.Parse, AddressOf CurrencyToDecimal
        
        textBox1.DataBindings.Add(binding)
    End Sub
    
    Private Sub DecimalToCurrency(ByVal sender As Object, ByVal e As ConvertEventArgs)
        If e.DesiredType IsNot GetType(String) Then
            Return
        End If
        e.Value = CDec(e.Value).ToString("c")
    End Sub
    
    Private Sub CurrencyToDecimal(ByVal sender As Object, ByVal e As ConvertEventArgs)
        If e.DesiredType IsNot GetType(Decimal) Then
            Return
        End If
        e.Value = Convert.ToDecimal(e.Value.ToString())
    End Sub
End Class

' Simple example for basic AddHandler usage
Sub TestBasicEvents()
    Dim Obj As New Class1
    AddHandler Obj.Ev_Event, AddressOf EventHandler
    Obj.CauseSomeEvent()
    RemoveHandler Obj.Ev_Event, AddressOf EventHandler
    Obj.CauseSomeEvent()
    
    ' Lambda expression example
    AddHandler Obj.Ev_Event, Sub ()
        MsgBox("Lambda caught event.")
    End Sub
    Obj.CauseSomeEvent()
End Sub

Sub EventHandler()
    MsgBox("EventHandler caught event.")
End Sub

Public Class Class1
    Public Event Ev_Event()
    Sub CauseSomeEvent()
        RaiseEvent Ev_Event()
    End Sub
End Class

En este ejemplo se muestra lo siguiente:

  • Crear un Binding objeto para el enlace de datos.
  • Usar AddHandler para adjuntar ConvertEventHandler delegados a los Format eventos y Parse .
  • Implementación de métodos de controlador de eventos que convierten entre formatos de cadena decimal y de moneda.
  • Uso básico AddHandler con eventos personalizados y expresiones lambda.

Consulte también