Pernyataan Event (Peristiwa)
Deklarasikan peristiwa yang ditentukan pengguna.
Sintaks
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Event eventname As delegatename _
[ Implements implementslist ]
' -or-
[ <attrlist> ] [ accessmodifier ] _
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _
[ Implements implementslist ]
[ <attrlist> ] AddHandler(ByVal value As delegatename)
[ statements ]
End AddHandler
[ <attrlist> ] RemoveHandler(ByVal value As delegatename)
[ statements ]
End RemoveHandler
[ <attrlist> ] RaiseEvent(delegatesignature)
[ statements ]
End RaiseEvent
End Event
Generator
Bagian | Deskripsi |
---|---|
attrlist |
Opsional. Daftar atribut yang berlaku untuk peristiwa ini. Beberapa atribut dipisahkan dengan koma. Anda harus menyertakan Daftar Atribut dalam tanda kurung sudut ("< " dan "> "). |
accessmodifier |
Opsional. Tentukan kode apa yang dapat mengakses peristiwa. Bisa jadi salah satu dari yang berikut: - Publik—semua kode yang dapat mengakses elemen yang mendeklarasikannya yang dapat mengaksesnya. - Dilindungi—hanya kode di dalam kelas kode atau kelas turunan kode yang dapat mengaksesnya. - Friend—hanya kode dalam rakitan yang sama yang dapat mengaksesnya. - Privat—hanya kode dalam elemen yang mendeklarasikannya yang dapat mengaksesnya. - Friend yang Dilindungi-hanya kode di kelas peristiwa, kelas turunan, atau rakitan yang sama yang dapat mengaksesnya. - Privat yang Dilindungi-hanya kode di kelas peristiwa atau kelas turunan di rakitan yang sama yang dapat mengaksesnya. |
Shared |
Opsional. Tentukan bahwa peristiwa ini tidak terkait dengan instans tertentu dari kelas atau struktur. |
Shadows |
Opsional. Tunjukkan bahwa peristiwa ini mendeklarasikan kembali dan menyembunyikan elemen pemrograman bernama identik, atau kumpulan elemen kelebihan beban, di kelas dasar. Anda dapat membayangi segala jenis elemen yang dideklarasikan dengan jenis lainnya. Elemen bayangan tidak tersedia dari dalam kelas turunan yang membayangi elemen bayangan, kecuali dari tempat elemen bayangan tidak dapat diakses. Misalnya, jika elemen Private membayangi elemen kelas dasar, kode yang tidak memiliki izin untuk mengakses elemen Private akan mengakses elemen kelas dasar sebagai gantinya. |
eventname |
Harus diisi. Nama peristiwa; mengikuti konvensi penamaan variabel standar. |
parameterlist |
Opsional. Daftar variabel lokal yang mewakili parameter peristiwa ini. Anda harus menyertakan Daftar Parameter dalam tanda kurung. |
Implements |
Opsional. Tunjukkan bahwa peristiwa ini menerapkan peristiwa antarmuka. |
implementslist |
Diperlukan jika Implements diberikan. Daftar prosedur Sub yang diterapkan. Beberapa prosedur dipisahkan dengan koma:implementedprocedure [ , implementedprocedure ... ] Setiap implementedprocedure memiliki sintaks dan bagian berikut:interface .definedname - interface - Wajib. Nama antarmuka yang diterapkan oleh kelas atau struktur berisi prosedur ini.- Definedname - Wajib. Nama yang digunakan untuk menentukan prosedur dalam interface . Nama tidak harus sama dengan name , nama yang digunakan prosedur ini untuk menerapkan prosedur yang ditentukan. |
Custom |
Harus diisi. Peristiwa yang dideklarasikan sebagai Custom harus menentukan pengakses AddHandler , RemoveHandler , dan RaiseEvent kustom. |
delegatename |
Opsional. Nama delegasi yang menentukan tanda tangan penanganan aktivitas. |
AddHandler |
Harus diisi. Deklarasikan pengakses AddHandler , yang menetapkan pernyataan yang akan dijalankan saat penanganan aktivitas ditambahkan, baik secara eksplisit dengan menggunakan pernyataan AddHandler atau secara implisit dengan menggunakan klausul Handles . |
End AddHandler |
Harus diisi. Hentikan blok AddHandler . |
value |
Harus diisi. Nama parameter. |
RemoveHandler |
Harus diisi. Deklarasikan pengakses RemoveHandler , yang menetapkan pernyataan yang akan dijalankan saat penanganan aktivitas dihapus menggunakan pernyataan RemoveHandler . |
End RemoveHandler |
Harus diisi. Hentikan blok RemoveHandler . |
RaiseEvent |
Harus diisi. Deklarasikan pengakses RaiseEvent , yang menetapkan pernyataan yang akan dijalankan saat peristiwa dimunculkan menggunakan pernyataan RaiseEvent . Biasanya, hal ini memanggil daftar delegasi yang dikelola oleh pengakses AddHandler dan RemoveHandler . |
End RaiseEvent |
Harus diisi. Hentikan blok RaiseEvent . |
delegatesignature |
Harus diisi. Daftar parameter yang cocok dengan parameter yang diperlukan oleh delegasi delegatename . Anda harus menyertakan Daftar Parameter dalam tanda kurung. |
statements |
Opsional. Pernyataan yang menyimpan isi metode AddHandler , RemoveHandler , dan RaiseEvent . |
End Event |
Harus diisi. Hentikan blok Event . |
Keterangan
Setelah peristiwa dideklarasikan, gunakan pernyataan RaiseEvent
untuk memunculkan peristiwa. Peristiwa umum dapat dideklarasikan dan dimunculkan seperti yang ditunjukkan pada fragmen berikut:
Public Class EventSource
' Declare an event.
Public Event LogonCompleted(ByVal UserName As String)
Sub CauseEvent()
' Raise an event on successful logon.
RaiseEvent LogonCompleted("AustinSteele")
End Sub
End Class
Catatan
Anda dapat mendeklarasikan argumen peristiwa seperti halnya argumen prosedur, dengan pengecualian berikut: peristiwa tidak boleh memiliki argumen bernama, argumen ParamArray
, atau argumen Optional
. Peristiwa tidak memiliki nilai pengembalian.
Untuk menangani peristiwa, Anda harus mengaitkan peristiwa dengan subrutin penanganan aktivitas baik menggunakan pernyataan Handles
atau AddHandler
. Tanda tangan dari subrutin dan peristiwa harus cocok. Untuk menangani peristiwa bersama, Anda harus menggunakan pernyataan AddHandler
.
Anda dapat menggunakan Event
hanya pada tingkat modul. Ini berarti konteks deklarasi untuk peristiwa harus berupa kelas, struktur, modul, atau antarmuka, dan tidak boleh berupa file sumber, namespace, prosedur, atau blok. Untuk informasi selengkapnya, lihat Konteks Deklarasi dan Tingkat Akses Default.
Dalam sebagian besar keadaan, Anda dapat menggunakan sintaks pertama di bagian Sintaks dari topik ini untuk mendeklarasikan peristiwa. Tetapi, beberapa skenario mengharuskan Anda memiliki kontrol lebih besar atas perilaku mendetail dari peristiwa. Sintaks terakhir di bagian Sintaks pada topik ini, yang menggunakan kata kunci Custom
, memberikan kontrol tersebut dengan memungkinkan Anda menentukan peristiwa kustom. Dalam peristiwa kustom, Anda menentukan dengan tepat apa yang terjadi saat kode menambahkan atau menghapus penanganan aktivitas ke atau dari peristiwa, atau saat kode memunculkan peristiwa. Sebagai contoh, lihat Cara: Mendeklarasikan Peristiwa Kustom Untuk Menghemat Memori dan Cara: Mendeklarasikan Peristiwa Kustom Untuk Menghindari Pemblokiran.
Contoh
Contoh berikut menggunakan peristiwa untuk menghitung mundur dalam hitungan detik dari 10 ke 0. Kode menggambarkan beberapa metode, properti, dan pernyataan terkait peristiwa. Ini termasuk pernyataan RaiseEvent
.
Kelas yang memunculkan peristiwa adalah sumber kejadian, dan metode yang memproses peristiwa adalah penanganan aktivitas. Sumber kejadian dapat memiliki beberapa penangan untuk peristiwa yang dihasilkan sumber kejadian. Ketika kelas memunculkan peristiwa, peristiwa tersebut dimunculkan pada setiap kelas yang telah memilih untuk menangani peristiwa untuk instans objek tersebut.
Contoh juga menggunakan formulir (Form1
) dengan tombol (Button1
) dan kotak teks (TextBox1
). Saat Anda mengklik tombol, kotak teks pertama menampilkan hitungan mundur dari 10 hingga 0 detik. Saat waktu penuh (10 detik) telah berlalu, kotak teks pertama menampilkan "Selesai".
Kode untuk Form1
menentukan status awal dan terminal dari formulir. Kode juga berisi kode yang dijalankan saat peristiwa dimunculkan.
Untuk menggunakan contoh ini, buka proyek Formulir Windows baru. Kemudian tambahkan tombol bernama Button1
dan kotak teks bernama TextBox1
ke formulir utama, bernama Form1
. Kemudian klik kanan formulir dan klik Lihat Kode untuk membuka penyunting kode.
Tambahkan variabel WithEvents
ke bagian deklarasi kelas Form1
:
Private WithEvents mText As TimerState
Tambahkan kode berikut ke kode untuk Form1
. Ganti prosedur duplikat yang mungkin ada, seperti Form_Load
atau Button_Click
.
Private Sub Form1_Load() Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click() Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Private Sub mText_ChangeText() Handles mText.Finished
TextBox1.Text = "Done"
End Sub
Private Sub mText_UpdateTime(ByVal Countdown As Double
) Handles mText.UpdateTime
TextBox1.Text = Format(Countdown, "##0.0")
' Use DoEvents to allow the display to refresh.
My.Application.DoEvents()
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double,
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Dim SoFar As Double = 0
Do While ElapsedTime < Duration
If ElapsedTime > SoFar + Increment Then
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
End If
ElapsedTime = DateAndTime.Timer - Start
Loop
RaiseEvent Finished()
End Sub
End Class
Tekan F5 untuk menjalankan contoh sebelumnya, dan klik tombol berlabel Mulai. Kotak teks pertama mulai menghitung mundur detik. Saat waktu penuh (10 detik) telah berlalu, kotak teks pertama menampilkan "Selesai".
Catatan
Metode My.Application.DoEvents
tidak memproses peristiwa dengan cara yang sama seperti yang dilakukan formulir. Untuk mengaktifkan formulir guna menangani peristiwa secara langsung, Anda dapat menggunakan multialur. Untuk informasi selengkapnya, lihat Alur Terkelola.