Compartir a través de


Control de eventos de Visual Basic y WPF

Si va a codificar en Visual Basic .NET, puede usar la palabra clave Handles específica del lenguaje para adjuntar un controlador de eventos a un objeto . El objeto puede ser una instancia en code-behind o un elemento en Lenguaje de Marcado de Aplicaciones Extensibles (XAML). Handles se puede usar para asignar controladores de eventos para eventos de Common Language Runtime (CLR) o eventos enrutados de Windows Presentation Foundation (WPF). Sin embargo, Handles tiene algunas limitaciones de uso cuando se usa para adjuntar controladores de eventos para eventos enrutados.

Prerrequisitos

El artículo supone un conocimiento básico de los eventos enrutados y que hayas leído Información general sobre eventos enrutados. Para seguir los ejemplos de este artículo, le ayuda si está familiarizado con el lenguaje de marcado extensible de aplicaciones (XAML) y sabe cómo escribir aplicaciones de Windows Presentation Foundation (WPF).

Sintaxis

La sintaxis de una Sub declaración que usa la palabra clave Handles es: Sub <procedure name> Handles <object name>.<event name>. Esa sintaxis designa un procedimiento como el controlador de eventos que se ejecutará cuando se genere un evento especificado por <event name> en un objeto especificado por <object name>. El evento debe ser miembro de la clase o la clase base del objeto. En el ejemplo siguiente se muestra cómo adjuntar un controlador de eventos a un elemento XAML mediante Handles.

' Click event handler attached to XamlButton using Handles.
Private Sub XamlButton_Click(sender As Object, e As RoutedEventArgs) Handles XamlButton.Click

    ' Handler logic.
    Debug.WriteLine($"Click event handler attached to XamlButton using Handles.")

End Sub

Para usar Handles con un objeto definido en código subyacente, normalmente se declara el objeto mediante la palabra clave WithEvents . Para obtener más información sobre el WithEvents uso, consulte estos ejemplos. WPF declara automáticamente todos los elementos XAML mediante Friend WithEvents. En el ejemplo siguiente se muestra cómo declarar un objeto definido en código subyacente mediante WithEvents.

' Declare a new button using WithEvents.
Dim WithEvents CodeButton As New Button With {
    .Content = "New button",
    .Background = Brushes.Yellow
}

' Click event handler attached to CodeButton using Handles.
Private Sub CodeButton_Click(sender As Object, e As RoutedEventArgs) Handles CodeButton.Click

    ' Handler logic.
    Debug.WriteLine($"Click event handler attached to CodeButton using Handles.")

End Sub

Para usar el mismo controlador para varios eventos, separe entre comas los <object name>.<event name> eventos. Por ejemplo: Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click. El orden de los eventos separados por comas es inmaterial.

Puede asignar controladores diferentes para el mismo evento con varias Handles instrucciones. El orden de las Handles instrucciones no determina el orden en el que se invocan los controladores cuando se produce el evento.

Sugerencia

Para quitar un controlador que se agregó con Handles, llame a RemoveHandler. Por ejemplo: RemoveHandler Button1.Click, AddressOf Button1_Click.

Uso de "Handles" en una aplicación WPF

Para un objeto definido en XAML, la sintaxis del evento <object name>.<event name> requiere el elemento XAML que representa el objeto para tener una Name propiedad o x:Name. Sin embargo, no se requiere una propiedad name para el elemento raíz de la página XAML, para el que puedes usar el nombre Me. En el ejemplo siguiente se muestra cómo adjuntar un controlador de eventos a una raíz de página XAML mediante Handles.

' Loaded event handler attached to the XAML page root using Handles.
Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded

    ' Handler logic.
    Debug.WriteLine($"Loaded event handler attached to Window using Handles.")

End Sub

Cuando se compila una página XAML, todos los elementos XAML con un Name parámetro o x:Name se declaran como Friend WithEvents. Como resultado, puedes usar cualquier elemento XAML con Handles.

Sugerencia

IntelliSense de Visual Studio muestra los objetos que se pueden usar con Handles.

Independientemente de si adjunta un controlador de eventos mediante Handles, sintaxis de atributo XAML, la instrucción AddHandler o el AddHandler método , el comportamiento del sistema de eventos es el mismo.

Nota:

No uses los atributos XAML y Handles para adjuntar el mismo controlador de eventos al mismo evento; de lo contrario, el controlador de eventos se llamará dos veces para cada evento.

Limitaciones

La palabra clave Handles tiene estas limitaciones de uso:

  • Solo puede usar Handles para adjuntar un controlador de eventos a un objeto si el evento es miembro de la clase o la clase base del objeto. Por ejemplo, puede usar Handles para adjuntar un Click controlador de eventos a un botón cuya clase ButtonBase base genera el Click evento enrutado. Sin embargo, una de las características de los eventos enrutados es que atraviesan el árbol de elementos, lo que permite escuchar y controlar un Click evento en un nivel superior al elemento que lo generó. Un evento enrutado que un elemento primario escucha y maneja se denomina evento adjunto. Handles no se puede usar para eventos adjuntos porque su sintaxis no admite especificar un agente de escucha diferente en el árbol de elementos XAML que el elemento que generó el evento. Para asignar controladores de eventos para eventos adjuntos, tendrás que usar la sintaxis de atributo XAML o el AddHandler método . Para obtener más información sobre los eventos adjuntos, vea Información general sobre eventos adjuntos y Eventos adjuntos en WPF.

  • Handles La sintaxis no admite la invocación del controlador de eventos para Handled eventos. Para permitir que el controlador de eventos se invoque para Handled eventos, adjunte el controlador de eventos mediante el AddHandler(RoutedEvent, Delegate, Boolean) método y establezca su handledEventsToo parámetro en true.

Consulte también