Bagikan melalui


Penanganan peristiwa Visual Basic dan WPF

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

Prasyarat

Artikel ini mengasumsikan pengetahuan dasar tentang event yang dirutekan, dan bahwa Anda telah membaca Gambaran Umum Event 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).

Sintaksis

Sintaks untuk deklarasi yang menggunakan kata kunci Handles adalah: . Sintaks tersebut 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 menggunakan Handles dengan objek yang ditentukan dalam code-behind, biasanya Anda mendeklarasikan objek menggunakan kata kunci WithEvents. Untuk informasi selengkapnya tentang penggunaan WithEvents, lihat contoh ini. WPF secara otomatis mendeklarasikan semua elemen XAML menggunakan Friend WithEvents. Contoh berikut menunjukkan cara mendeklarasikan objek yang ditentukan dalam kode di belakang 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 peristiwa <object name>.<event name> dengan koma. 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 pernyataan Handles. Urutan pernyataan Handles tidak menentukan urutan di mana handler dipanggil saat peristiwa terjadi.

Petunjuk / Saran

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

Menggunakan 'Handles' dalam aplikasi WPF

Untuk objek yang ditentukan dalam XAML, sintaks peristiwa Handles<object name>.<event name> memerlukan elemen XAML yang mewakili objek untuk memiliki properti Name 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 parameter Name atau x:Name dinyatakan sebagai Friend WithEvents. Akibatnya, Anda dapat menggunakan elemen XAML apa pun dengan Handles.

Petunjuk / Saran

Visual Studio IntelliSense menampilkan objek yang dapat digunakan dengan Handles.

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

Nota

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.

Keterbatasan

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 penanganan aktivitas Click ke tombol yang kelas dasarnya ButtonBase menaikkan peristiwa yang dirutekan Click. Namun, salah satu fitur peristiwa yang dirutekan adalah bahwa mereka melintasi hirarki elemen, yang memungkinkan untuk mendengarkan dan menangani peristiwa Click pada tingkat yang lebih tinggi daripada elemen yang memicunya. Peristiwa yang dirutekan yang didengarkan dan ditangani elemen induk disebut peristiwa terlampir . Handles tidak dapat digunakan untuk peristiwa terlampir 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 metode AddHandler. Untuk informasi selengkapnya tentang peristiwa terlampir, lihat gambaran umum peristiwa terlampir dan peristiwa terlampir di WPF.

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

Lihat juga