Condividi tramite


Gestione degli eventi di Visual Basic e WPF (WPF .NET)

Se si sta codificando in Visual Basic .NET, è possibile usare la parola chiave Handles specifica del linguaggio per associare un gestore eventi a un oggetto. L'oggetto può essere un'istanza nel code-behind o un elemento nel linguaggio XAML (Extensible Application Markup Language). Handles può essere usato per assegnare gestori di eventi per eventi CLR (Common Language Runtime) o eventi indirizzatidi Windows Presentation Foundation (WPF). Tuttavia, Handles presenta alcune limitazioni di utilizzo quando viene usato per collegare gestori di eventi per gli eventi indirizzati.

Prerequisiti

L'articolo presuppone una conoscenza di base degli eventi indirizzati e che tu abbia letto la panoramica degli eventi indirizzati. Per seguire gli esempi in questo articolo, è utile se si ha familiarità con Extensible Application Markup Language (XAML) e si sa come scrivere applicazioni Windows Presentation Foundation (WPF).

Sintassi

La sintassi per una dichiarazione di che utilizza la parola chiave Handles di è . Tale sintassi definisce una routine come gestore eventi che verrà eseguita quando viene generato un evento specificato da <event name> su un oggetto specificato da <object name>. L'evento deve essere un membro della classe o della classe base dell'oggetto. L'esempio seguente illustra come associare un gestore eventi a un 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

Per usare Handles con un oggetto definito nel code-behind, in genere si dichiara l'oggetto usando la parola chiave WithEvents. Per altre informazioni sull'utilizzo di WithEvents, vedere questi esempi di . WPF dichiara automaticamente tutti gli elementi XAML usando Friend WithEvents. Nell'esempio seguente viene illustrato come dichiarare un oggetto definito nel 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

Per usare lo stesso gestore per più eventi, separare da virgole gli eventi <object name>.<event name>. Ad esempio, Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click. L'ordine degli eventi delimitati da virgole è irrilevante.

È possibile assegnare gestori diversi per lo stesso evento con più istruzioni Handles. L'ordine delle istruzioni Handles non determina l'ordine in cui i gestori vengono richiamati quando si verifica l'evento.

Suggerimento

Per rimuovere un gestore aggiunto con Handles, chiamare RemoveHandler. Ad esempio, RemoveHandler Button1.Click, AddressOf Button1_Click.

Uso di "Handle" in un'applicazione WPF

Per un oggetto definito in XAML, la Handle sintassi degli eventi <object name>.<event name> richiede che l'elemento XAML che rappresenta l'oggetto abbia una proprietà Name o x:Name. Tuttavia, un attributo 'name' non è necessario per l'elemento radice della pagina XAML, puoi utilizzare il nome Me. L'esempio seguente illustra come associare un gestore eventi a una radice di pagina 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 viene compilata una pagina XAML, ogni elemento XAML con un parametro Name o x:Name viene dichiarato come Friend WithEvents. Di conseguenza, puoi usare qualsiasi elemento XAML con Handles.

Suggerimento

Visual Studio IntelliSense mostra gli oggetti che possono essere usati con Handles.

Indipendentemente dal fatto che si allega un gestore eventi usando , la sintassi dell'attributo XAML, l'istruzione AddHandler o il metodo , il comportamento del sistema eventi è lo stesso.

Nota

Non usare entrambi gli attributi XAML e Handles per associare lo stesso gestore eventi allo stesso evento. In caso contrario, il gestore eventi verrà chiamato due volte per ogni evento.

Limitazioni

La parola chiave handle di presenta queste limitazioni di utilizzo:

  • È possibile utilizzare Handles solo per associare un gestore eventi a un oggetto se l'evento è un membro della classe o della classe base dell'oggetto. Ad esempio, è possibile usare Handles per associare un gestore di eventi Click a un pulsante la cui classe base ButtonBase genera l'evento instradato Click. Tuttavia, una delle funzionalità di eventi indirizzati è che attraversano l'albero degli elementi, che consente di ascoltare e gestire un evento Click a un livello superiore rispetto all'elemento che l'ha generata. Un evento instradato per cui un elemento padre è in ascolto e gestisce è chiamato evento allegato . Handles non può essere usato per gli eventi associati perché la sintassi non supporta la specifica di un listener diverso nell'albero degli elementi XAML rispetto all'elemento che ha generato l'evento. Per assegnare gestori eventi per gli eventi associati, dovrai usare la sintassi degli attributi XAML o il metodo AddHandler. Per ulteriori informazioni sugli eventi allegati, vedere Panoramica degli eventi allegati e Eventi allegati in WPF.

  • La sintassi di Handles non supporta l'invocazione di gestori di eventi per gli eventi Handled. Per consentire al gestore eventi di essere richiamato per gli eventi di Handled, collegare il gestore eventi usando il metodo AddHandler(RoutedEvent, Delegate, Boolean) e impostarne il parametro handledEventsToo su true.

Vedere anche