Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 usarHandles
para adjuntar un Click controlador de eventos a un botón cuya clase ButtonBase base genera elClick
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 unClick
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 paraHandled
eventos, adjunte el controlador de eventos mediante el AddHandler(RoutedEvent, Delegate, Boolean) método y establezca suhandledEventsToo
parámetro entrue
.
Consulte también
.NET Desktop feedback