Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Se você estiver codificando no Visual Basic .NET, poderá usar a palavra-chave Handles específica do idioma para anexar um manipulador de eventos a um objeto. O objeto pode ser uma instância em code-behind ou um elemento em Extensible Application Markup Language (XAML).
Handles pode ser usado para atribuir manipuladores de eventos para eventos CLR (Common Language Runtime) ou eventos roteados do Windows Presentation Foundation (WPF). No entanto, Handles tem algumas limitações de uso quando usado para anexar manipuladores de eventos para eventos roteados.
Pré-requisitos
O artigo pressupõe um conhecimento básico de eventos roteados e que você leu visão geral de eventos roteados. Para seguir os exemplos neste artigo, isso ajuda se você estiver familiarizado com Extensible Application Markup Language (XAML) e souber como escrever aplicativos Windows Presentation Foundation (WPF).
Sintaxe
A sintaxe de uma Sub declaração que usa a palavra-chave Handles é: Sub <procedure name> Handles <object name>.<event name>. Essa sintaxe designa um procedimento como o manipulador de eventos que será executado quando um evento especificado por <event name> for gerado em um objeto especificado por <object name>. O evento deve ser um membro da classe ou classe base do objeto. O exemplo a seguir mostra como anexar um manipulador de eventos a um elemento XAML usando 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 com um objeto definido em code-behind, normalmente você declara o objeto usando a palavra-chave WithEvents . Para obter mais informações sobre WithEvents o uso, consulte estes exemplos. WPF declara automaticamente todos os elementos XAML usando Friend WithEvents. O exemplo a seguir mostra como declarar um objeto definido em code-behind usando 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 o mesmo manipulador para vários eventos, separe os eventos por <object name>.<event name> vírgula. Por exemplo, Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click. A ordem dos eventos separados por vírgulas é irrelevante.
Você pode atribuir manipuladores diferentes para o mesmo evento com várias Handles instruções. A ordem das Handles instruções não determina a ordem na qual os manipuladores são invocados quando o evento ocorre.
Sugestão
Para remover um manipulador que foi adicionado com Handles, chame RemoveHandler. Por exemplo, RemoveHandler Button1.Click, AddressOf Button1_Click.
Usando 'Handles' em um aplicativo WPF
Para um objeto definido em XAML, a sintaxe do evento Handles requer que o elemento XAML que representa o objeto tenha uma propriedade <object name>.<event name> ou a propriedade Name. No entanto, uma propriedade nome não é necessária para o elemento raiz da página XAML, para o qual pode usar o nome Me. O exemplo a seguir mostra como anexar um manipulador de eventos a uma raiz de página XAML usando 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
Quando uma página XAML é compilada, cada elemento XAML com um Name parâmetro ou x:Name é declarado como Friend WithEvents. Como tal, pode-se usar qualquer elemento XAML com Handles.
Sugestão
Visual Studio IntelliSense mostra os objetos que podem ser usados com Handles.
Independentemente de você anexar um manipulador de eventos usando Handlesa sintaxe do atributo XAML, a instrução AddHandler ou o AddHandler método, o comportamento do sistema de eventos é o mesmo.
Observação
Não use ambos os atributos XAML e Handles anexe o mesmo manipulador de eventos ao mesmo evento, caso contrário, o manipulador de eventos será chamado duas vezes para cada evento.
Limitações
A palavra-chave Handles tem estas limitações de uso:
Você só pode usar
Handlespara anexar um manipulador de eventos a um objeto se o evento for um membro da classe ou classe base do objeto. Por exemplo, você pode usarHandlespara anexar um Click manipulador de eventos a um botão cuja classe ButtonBase base gera oClickevento roteado. No entanto, uma das características dos eventos roteados é que eles atravessam a árvore de elementos, o que torna possível ouvir e manipular umClickevento em um nível mais alto do que o elemento que o elevou. Um evento roteado que um elemento pai escuta e manipula é chamado de evento anexado.Handlesnão pode ser usado para eventos anexados porque sua sintaxe não oferece suporte à especificação de um ouvinte diferente na árvore de elementos XAML do elemento que gerou o evento. Para atribuir manipuladores de eventos para eventos anexados, você precisará usar a sintaxe do atributo XAML ou o AddHandler método. Para obter mais informações sobre eventos anexados, consulte Visão geral de eventos anexados e Eventos anexados no WPF.HandlesA sintaxe não suporta a invocação do manipulador de eventos para Handled eventos. Para permitir que o manipulador de eventos seja invocado paraHandledeventos, anexe o manipulador de eventos usando o AddHandler(RoutedEvent, Delegate, Boolean) método e defina seuhandledEventsTooparâmetro comotrue.
Ver também
.NET Desktop feedback