Kejadian (Visual Basic)
Meskipun Anda mungkin memvisualisasikan proyek Visual Studio sebagai serangkaian prosedur yang dijalankan secara berurutan, pada kenyataannya, sebagian besar program didorong peristiwa—yang berarti aliran eksekusi ditentukan oleh kejadian eksternal yang disebut peristiwa.
Peristiwa adalah sinyal yang menginformasikan aplikasi bahwa sesuatu yang penting telah terjadi. Misalnya, saat pengguna mengklik kontrol pada formulir, formulir dapat menaikkan peristiwa Click
dan memanggil prosedur yang menangani peristiwa. Peristiwa juga memungkinkan tugas terpisah untuk berkomunikasi. Misalnya, aplikasi Anda melakukan tugas pengurutan secara terpisah dari aplikasi utama. Jika pengguna membatalkan pengurutan, aplikasi Anda dapat mengirim peristiwa pembatalan yang menginstruksikan proses pengurutan untuk berhenti.
Istilah dan Konsep Acara
Bagian ini menjelaskan istilah dan konsep yang digunakan dengan peristiwa di Visual Basic.
Mendeklarasikan Peristiwa
Anda mendeklarasikan peristiwa dalam kelas, struktur, modul, dan antarmuka menggunakan kata kunci Event
, seperti dalam contoh berikut:
Event AnEvent(ByVal EventNumber As Integer)
Memunculkan Peristiwa
Peristiwa seperti pesan yang mengumumkan bahwa sesuatu yang penting telah terjadi. Tindakan menyiarkan pesan disebut memunculkan peristiwa. Dalam Visual Basic, Anda memunculkan peristiwa dengan pernyataan RaiseEvent
, seperti dalam contoh berikut:
RaiseEvent AnEvent(EventNumber)
Peristiwa harus dinaikkan dalam cakupan kelas, modul, atau struktur tempat peristiwa dideklarasikan. Misalnya, kelas turunan tidak dapat memunculkan peristiwa yang diwarisi dari kelas dasar.
Pengirim Peristiwa
Objek apa pun yang mampu menaikkan peristiwa adalah pengirim peristiwa, juga dikenal sebagai sumber peristiwa. Formulir, kontrol, dan objek yang ditentukan pengguna adalah contoh pengirim peristiwa.
Penanganan Aktivitas
Penanganan aktivitas adalah prosedur yang dipanggil saat peristiwa yang sesuai terjadi. Anda dapat menggunakan sub-rutin yang valid dengan tanda tangan yang cocok sebagai penanganan aktivitas. Namun, Anda tidak dapat menggunakan fungsi sebagai penanganan aktivitas, karena tidak dapat mengembalikan nilai ke sumber kejadian.
Visual Basic menggunakan konvensi penamaan standar untuk penanganan aktivitas yang menggabungkan nama pengirim peristiwa, garis bawah, dan nama peristiwa. Misalnya, peristiwa Click
tombol bernama button1
akan diberi nama Sub button1_Click
.
Catatan
Kami menyarankan agar Anda menggunakan konvensi penamaan ini saat menentukan penanganan aktivitas untuk peristiwa Anda sendiri, tetapi tidak diperlukan; Anda dapat menggunakan nama sub-rutin yang valid.
Mengaitkan Peristiwa dengan Penanganan Aktivitas
Sebelum penanganan aktivitas dapat digunakan, Anda harus terlebih dahulu mengaitkannya dengan peristiwa dengan menggunakan pernyataan Handles
atau AddHandler
.
WithEvents dan Klausul Handel
Pernyataan WithEvents
dan klausul Handles
menyediakan cara deklaratif untuk menentukan penanganan aktivitas. Peristiwa yang dimunculkan oleh objek yang dideklarasikan dengan kata kunci WithEvents
dapat ditangani oleh prosedur apa pun dengan pernyataan Handles
untuk peristiwa tersebut, seperti yang ditunjukkan dalam contoh berikut:
' Declare a WithEvents variable.
Dim WithEvents EClass As New EventClass
' Call the method that raises the object's events.
Sub TestEvents()
EClass.RaiseEvents()
End Sub
' Declare an event handler that handles multiple events.
Sub EClass_EventHandler() Handles EClass.XEvent, EClass.YEvent
MsgBox("Received Event.")
End Sub
Class EventClass
Public Event XEvent()
Public Event YEvent()
' RaiseEvents raises both events.
Sub RaiseEvents()
RaiseEvent XEvent()
RaiseEvent YEvent()
End Sub
End Class
Pernyataan WithEvents
dan klausul Handles
sering menjadi pilihan terbaik untuk penanganan aktivitas karena sintaksis deklaratif yang mereka gunakan membuat penanganan peristiwa lebih mudah untuk dikodekan, dibaca, dan di-debug. Namun, perhatikan batasan berikut pada penggunaan variabel WithEvents
:
Anda tidak dapat menggunakan variabel
WithEvents
sebagai variabel objek. Artinya, Anda tidak dapat menyatakannya sebagaiObject
—Anda harus menentukan nama kelas ketika Anda mendeklarasikan variabel.Karena peristiwa bersama tidak terkait dengan instans kelas, Anda tidak dapat menggunakan
WithEvents
untuk menangani peristiwa bersama secara deklaratif. Demikian pula, Anda tidak dapat menggunakanWithEvents
atauHandles
untuk menangani peristiwa dariStructure
. Dalam kedua kasus, Anda dapat menggunakan pernyataanAddHandler
untuk menangani peristiwa tersebut.Anda tidak dapat membuat array variabel
WithEvents
.
WithEvents
Variabel memungkinkan satu penanganan aktivitas untuk menangani satu atau beberapa jenis peristiwa, atau satu atau beberapa penanganan aktivitas untuk menangani jenis peristiwa yang sama.
Handles
Meskipun klausul adalah cara standar untuk mengaitkan acara dengan penanganan aktivitas, klausul ini terbatas untuk mengaitkan peristiwa dengan penanganan aktivitas pada waktu kompilasi.
Dalam beberapa kasus, seperti dengan peristiwa yang terkait dengan formulir atau kontrol, Visual Basic secara otomatis mengeluarkan penanganan aktivitas kosong dan mengaitkannya dengan peristiwa. Misalnya, saat Anda mengklik dua kali tombol perintah pada formulir dalam mode desain, Visual Basic membuat penanganan aktivitas kosong dan variabel WithEvents
untuk tombol perintah, seperti dalam kode berikut:
Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click() Handles Button1.Click
End Sub
AddHandler dan RemoveHandler
Pernyataan AddHandler
ini mirip dengan klausul Handles
karena keduanya memungkinkan Anda menentukan penanganan aktivitas. Namun, AddHandler
, digunakan dengan RemoveHandler
, memberikan fleksibilitas yang lebih besar daripada Handles
klausul, memungkinkan Anda untuk menambahkan, menghapus, dan mengubah penanganan aktivitas yang terkait dengan peristiwa secara dinamis. Jika Anda ingin menangani peristiwa atau peristiwa bersama dari struktur, Anda harus menggunakan AddHandler
.
AddHandler
mengambil dua argumen: nama peristiwa dari pengirim peristiwa seperti kontrol, dan ekspresi yang mengevaluasi ke delegasi. Anda tidak perlu secara eksplisit menentukan kelas delegasi saat menggunakan AddHandler
, karena AddressOf
pernyataan selalu mengembalikan referensi ke delegasi. Contoh berikut mengaitkan penanganan aktivitas dengan peristiwa yang dimunculkan oleh objek:
AddHandler Obj.XEvent, AddressOf Me.XEventHandler
RemoveHandler
, yang memutuskan koneksi peristiwa dari penanganan aktivitas, menggunakan sintaks yang sama dengan AddHandler
. Contohnya:
RemoveHandler Obj.XEvent, AddressOf Me.XEventHandler
Dalam contoh berikut, penanganan aktivitas dikaitkan dengan peristiwa, dan peristiwa dinaikkan. Penanganan aktivitas menangkap peristiwa dan menampilkan pesan.
Kemudian penanganan aktivitas pertama dihapus dan penanganan aktivitas yang berbeda dikaitkan dengan peristiwa tersebut. Saat peristiwa dinaikkan lagi, pesan yang berbeda akan ditampilkan.
Terakhir, penanganan aktivitas kedua dihapus dan acara dinaikkan untuk ketiga kalinya. Karena tidak ada lagi penanganan aktivitas yang terkait dengan peristiwa, tidak ada tindakan yang diambil.
Module Module1
Sub Main()
Dim c1 As New Class1
' Associate an event handler with an event.
AddHandler c1.AnEvent, AddressOf EventHandler1
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler1
' Now associate a different event handler with the event.
AddHandler c1.AnEvent, AddressOf EventHandler2
' Call a method to raise the event.
c1.CauseTheEvent()
' Stop handling the event.
RemoveHandler c1.AnEvent, AddressOf EventHandler2
' This event will not be handled.
c1.CauseTheEvent()
End Sub
Sub EventHandler1()
' Handle the event.
MsgBox("EventHandler1 caught event.")
End Sub
Sub EventHandler2()
' Handle the event.
MsgBox("EventHandler2 caught event.")
End Sub
Public Class Class1
' Declare an event.
Public Event AnEvent()
Sub CauseTheEvent()
' Raise an event.
RaiseEvent AnEvent()
End Sub
End Class
End Module
Menangani Peristiwa yang Diwarisi dari Kelas Dasar
Kelas turunan—kelas yang mewarisi karakteristik dari kelas dasar—dapat menangani peristiwa yang diangkat oleh kelas dasarnya menggunakan pernyataan Handles MyBase
.
Untuk menangani peristiwa dari kelas dasar
Nyatakan penanganan aktivitas di kelas turunan dengan menambahkan
Handles MyBase.
pernyataan eventname ke baris deklarasi prosedur penanganan aktivitas Anda, di mana eventname adalah nama peristiwa di kelas dasar yang Anda tangani. Contohnya:Public Class BaseClass Public Event BaseEvent(ByVal i As Integer) ' Place methods and properties here. End Class Public Class DerivedClass Inherits BaseClass Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent ' Place code to handle events from BaseClass here. End Sub End Class
Bagian terkait
Judul | Deskripsi |
---|---|
Panduan: Mendeklarasikan dan Meningkatkan Peristiwa | Menyediakan deskripsi langkah demi langkah tentang cara mendeklarasikan dan menaikkan peristiwa untuk kelas. |
Panduan: Menangani Peristiwa | Menunjukkan cara menulis prosedur penanganan aktivitas. |
Cara: Mendeklarasikan Peristiwa Kustom Untuk Menghindari Pemblokiran | Menunjukkan cara menentukan peristiwa kustom yang memungkinkan penanganan aktivitasnya dipanggil secara asinkron. |
Cara: Mendeklarasikan Peristiwa Kustom Untuk Menghemat Memori | Menunjukkan cara menentukan peristiwa kustom yang hanya menggunakan memori saat peristiwa ditangani. |
Pemecahan Masalah Penanganan Aktivitas yang Diwariskan di Visual Basic | Topik ini mencantumkan masalah umum yang muncul dengan penanganan aktivitas di komponen yang diwariskan. |
Peristiwa | Menyediakan gambaran umum model peristiwa di .NET Framework. |
Membuat Penangan Aktivitas di Formulir Windows | Menjelaskan cara bekerja dengan peristiwa yang terkait dengan objek Formulir Windows. |
Delegasikan | Memberikan gambaran umum delegasi dalam Visual Basic. |