Bagikan melalui


Penanganan peristiwa Visual Basic dan WPF (WPF .NET)

Jika Anda mengkoding di Visual Basic .NET, Anda dapat menggunakan kata kunci Handles khusus bahasa untuk melampirkan penanganan aktivitas ke objek. Objek dapat menjadi instans di code-behind atau elemen dalam Extensible Application Markup Language (XAML). Handlesdapat digunakan untuk menetapkan penanganan aktivitas untuk peristiwa runtime bahasa umum (CLR) atau peristiwa rute Windows Presentation Foundation (WPF). Namun, Handles memiliki beberapa batasan penggunaan saat digunakan untuk melampirkan penanganan aktivitas untuk peristiwa yang dirutekan.

Penting

Dokumentasi Panduan Desktop untuk .NET 7 dan .NET 6 sedang dibangun.

Prasyarat

Artikel ini mengasumsikan pengetahuan dasar tentang peristiwa yang dirutekan, dan anda telah membaca ringkasan peristiwa yang dirutekan. Untuk mengikuti contoh dalam artikel ini, ini membantu jika Anda terbiasa dengan Extensible Application Markup Language (XAML) dan tahu cara menulis aplikasi Windows Presentation Foundation (WPF).

Sintaks

Sintaks untuk Sub deklarasi yang menggunakan kata kunci Handles adalah: Sub <procedure name> Handles <object name>.<event name>. Sintaks itu menunjuk prosedur sebagai penanganan aktivitas yang akan berjalan ketika peristiwa yang ditentukan oleh <event name> dinaikkan pada objek yang ditentukan oleh <object name>. Peristiwa harus menjadi anggota kelas objek atau kelas dasar. Contoh berikut menunjukkan cara melampirkan penanganan aktivitas ke elemen XAML menggunakan 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

Untuk digunakan Handles dengan objek yang ditentukan dalam code-behind, biasanya Anda mendeklarasikan objek menggunakan kata kunci WithEvents . Untuk informasi selengkapnya tentang WithEvents penggunaan, lihat contoh-contoh ini. WPF secara otomatis mendeklarasikan semua elemen XAML menggunakan Friend WithEvents. Contoh berikut menunjukkan cara mendeklarasikan objek yang ditentukan dalam code-behind menggunakan 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

Untuk menggunakan handler yang sama untuk beberapa peristiwa, pisahkan <object name>.<event name> koma peristiwa. Contohnya, Sub Button_Click(sender As Object, e As RoutedEventArgs) Handles Button1.Click, Button2.Click. Urutan peristiwa yang dipisahkan koma tidak bersifat immaterial.

Anda dapat menetapkan handler yang berbeda untuk peristiwa yang sama dengan beberapa Handles pernyataan. Urutan Handles pernyataan tidak menentukan urutan di mana handler dipanggil saat peristiwa terjadi.

Tip

Untuk menghapus handler yang ditambahkan dengan Handles, panggil RemoveHandler. Contohnya, RemoveHandler Button1.Click, AddressOf Button1_Click.

Menggunakan 'Handel' dalam aplikasi WPF

Untuk objek yang ditentukan dalam XAML, sintaks <object name>.<event name> peristiwa Handles memerlukan elemen XAML yang mewakili objek untuk memiliki Name properti atau x:Name. Namun, properti nama tidak diperlukan untuk elemen akar halaman XAML, yang dapat Anda gunakan nama Me. Contoh berikut menunjukkan cara melampirkan penanganan aktivitas ke akar halaman XAML menggunakan 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

Ketika halaman XAML dikompilasi, setiap elemen XAML dengan Name parameter atau x:Name dinyatakan sebagai Friend WithEvents. Akibatnya, Anda dapat menggunakan elemen XAML apa pun dengan Handles.

Tip

Visual Studio IntelliSense menampilkan objek yang dapat digunakan dengan Handles.

Terlepas dari apakah Anda melampirkan penanganan aktivitas menggunakan Handlessintaks atribut , XAML, pernyataan AddHandler , atau AddHandler metode , perilaku sistem peristiwa sama.

Catatan

Jangan gunakan atribut XAML dan Handles untuk melampirkan penanganan aktivitas yang sama ke peristiwa yang sama, jika tidak, penanganan aktivitas akan dipanggil dua kali untuk setiap peristiwa.

Batasan

Kata kunci Handles memiliki batasan penggunaan ini:

  • Anda hanya dapat menggunakan Handles untuk melampirkan penanganan aktivitas ke objek jika peristiwa tersebut adalah anggota kelas objek atau kelas dasar. Misalnya, Anda dapat menggunakan Handles untuk melampirkan Click penanganan aktivitas ke tombol yang kelas ButtonBase dasarnya meningkatkan peristiwa yang dirutekan Click . Namun, salah satu fitur peristiwa yang dirutekan adalah bahwa mereka melintasi pohon elemen, yang memungkinkan untuk mendengarkan dan menangani Click peristiwa pada tingkat yang lebih tinggi daripada elemen yang menaikkannya. Peristiwa yang dirutekan yang didengarkan dan ditangani elemen induk disebut peristiwa terlampir. Handles tidak dapat digunakan untuk peristiwa yang dilampirkan karena sintaksnya tidak mendukung pendengar yang berbeda di pohon elemen XAML daripada elemen yang memunculkan peristiwa. Untuk menetapkan penanganan aktivitas untuk peristiwa terlampir, Anda harus menggunakan sintaks atribut XAML atau AddHandler metode . Untuk informasi selengkapnya tentang peristiwa terlampir, lihat Gambaran umum peristiwa terlampir dan Peristiwa terlampir di WPF.

  • Handles sintaks tidak mendukung pemanggilan penanganan aktivitas untuk Handled peristiwa. Untuk memungkinkan penanganan aktivitas Anda dipanggil untuk Handled peristiwa, lampirkan penanganan aktivitas menggunakan AddHandler(RoutedEvent, Delegate, Boolean) metode dan atur parameternya handledEventsToo ke true.

Baca juga