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.

Lihat juga