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). Handles
dapat 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.
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 Handles
sintaks 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 menggunakanHandles
untuk melampirkan Click penanganan aktivitas ke tombol yang kelas ButtonBase dasarnya meningkatkan peristiwa yang dirutekanClick
. Namun, salah satu fitur peristiwa yang dirutekan adalah bahwa mereka melintasi pohon elemen, yang memungkinkan untuk mendengarkan dan menanganiClick
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 untukHandled
peristiwa, lampirkan penanganan aktivitas menggunakan AddHandler(RoutedEvent, Delegate, Boolean) metode dan atur parameternyahandledEventsToo
ketrue
.
Lihat juga
.NET Desktop feedback