Bagikan melalui


Pernyataan Peristiwa

Mendeklarasikan peristiwa yang ditentukan pengguna.

Sintaksis

[ <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  

Bagian

Bagian Deskripsi
attrlist Fakultatif. Daftar atribut yang berlaku untuk kejadian ini. Beberapa atribut dipisahkan oleh koma. Anda harus mengapit Daftar Atribut dalam tanda kurung sudut ("<" dan ">").
accessmodifier Fakultatif. Menentukan kode apa yang dapat mengakses peristiwa. Dapat berupa salah satu hal berikut:

- Publik—kode apa pun yang dapat mengakses elemen yang menyatakan dapat mengaksesnya.
- Dilindungi—hanya kode dalam kelasnya atau kelas turunan yang dapat mengaksesnya.
- Teman—hanya kode dalam rakitan yang sama yang dapat mengaksesnya.
- Privat—hanya kode dalam elemen yang menyatakan dapat mengaksesnya.
- Kode Khusus Teman yang dilindungi di kelas acara, kelas turunan, atau rakitan yang sama dapat mengaksesnya.
- Kode privat khusus yang dilindungi di kelas peristiwa atau kelas turunan dalam rakitan yang sama dapat mengaksesnya.
Shared Fakultatif. Menentukan bahwa peristiwa ini tidak terkait dengan instans kelas atau struktur tertentu.
Shadows Fakultatif. Menunjukkan bahwa peristiwa ini mendeklarasikan ulang dan menyembunyikan elemen pemrograman bernama identik, atau serangkaian elemen yang kelebihan beban, di kelas dasar. Anda dapat membayangi segala jenis elemen yang dideklarasikan dengan jenis lain.

Elemen bayangan tidak tersedia dari dalam kelas turunan yang membayanginya, kecuali dari tempat elemen bayangan tidak dapat diakses. Misalnya, jika Private elemen membayangi elemen kelas dasar, kode yang tidak memiliki izin untuk mengakses Private elemen mengakses elemen kelas dasar sebagai gantinya.
eventname Dibutuhkan. Nama peristiwa; mengikuti konvensi penamaan variabel standar.
parameterlist Fakultatif. Daftar variabel lokal yang mewakili parameter peristiwa ini. Anda harus mengapit Daftar Parameter dalam tanda kurung.
Implements Fakultatif. Menunjukkan bahwa peristiwa ini mengimplementasikan peristiwa antarmuka.
implementslist Diperlukan jika Implements disediakan. Daftar Sub prosedur yang sedang diimplementasikan. Beberapa prosedur dipisahkan oleh koma:

implementedprocedure [ , implementedprocedure ... ]

Masing-masing implementedprocedure memiliki sintaks dan bagian berikut:

interface.definedname

- interface -Diperlukan. Nama antarmuka yang berisi kelas atau struktur prosedur ini.
- Definedname -Diperlukan. Nama yang prosedurnya ditentukan dalam interface. Ini tidak harus sama dengan name, nama yang digunakan prosedur ini untuk menerapkan prosedur yang ditentukan.
Custom Dibutuhkan. Peristiwa yang dinyatakan sebagai Custom harus mendefinisikan aksesor , , RemoveHandlerdan RaiseEvent kustomAddHandler.
delegatename Fakultatif. Nama delegasi yang menentukan tanda tangan penanganan aktivitas.
AddHandler Dibutuhkan. Mendeklarasikan pengakses AddHandler , yang menentukan pernyataan yang akan dijalankan saat penanganan aktivitas ditambahkan, baik secara eksplisit dengan menggunakan AddHandler pernyataan atau secara implisit dengan menggunakan Handles klausul .
End AddHandler Dibutuhkan. AddHandler Menghentikan blok.
value Dibutuhkan. Nama parameter
RemoveHandler Dibutuhkan. Mendeklarasikan RemoveHandler pengakses, yang menentukan pernyataan yang akan dijalankan saat penanganan aktivitas dihapus menggunakan RemoveHandler pernyataan .
End RemoveHandler Dibutuhkan. RemoveHandler Menghentikan blok.
RaiseEvent Dibutuhkan. Mendeklarasikan RaiseEvent pengakses, yang menentukan pernyataan yang akan dijalankan saat peristiwa dinaikkan menggunakan RaiseEvent pernyataan . Biasanya, ini memanggil daftar delegasi yang dikelola oleh AddHandlerRemoveHandler dan aksesor.
End RaiseEvent Dibutuhkan. RaiseEvent Menghentikan blok.
delegatesignature Dibutuhkan. Daftar parameter yang cocok dengan parameter yang diperlukan oleh delegatename delegasi. Anda harus mengapit Daftar Parameter dalam tanda kurung.
statements Fakultatif. Pernyataan yang berisi isi AddHandlermetode , RemoveHandler, dan RaiseEvent .
End Event Dibutuhkan. Event Menghentikan blok.

Komentar

Setelah acara dideklarasikan, gunakan RaiseEvent pernyataan untuk menaikkan acara. Peristiwa umum mungkin dideklarasikan dan dimunculkan seperti yang ditunjukkan dalam 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

Nota

Anda dapat mendeklarasikan argumen peristiwa sama seperti argumen prosedur, dengan pengecualian berikut: peristiwa tidak boleh memiliki argumen, ParamArray argumen, atau Optional argumen bernama. Peristiwa tidak memiliki nilai pengembalian.

Untuk menangani peristiwa, Anda harus mengaitkannya dengan subroutine penanganan aktivitas menggunakan Handles pernyataan atau AddHandler . Tanda tangan subroutine dan peristiwa harus cocok. Untuk menangani peristiwa bersama, Anda harus menggunakan pernyataan tersebut AddHandler .

Anda hanya dapat menggunakan Event pada tingkat modul. Ini berarti konteks deklarasi untuk suatu peristiwa harus berupa kelas, struktur, modul, atau antarmuka, dan tidak dapat menjadi file sumber, namespace, prosedur, atau blok. Untuk informasi selengkapnya, lihat Konteks Deklarasi dan Tingkat Akses Bawaan.

Dalam kebanyakan keadaan, Anda dapat menggunakan sintaks pertama di bagian Sintaks dari topik ini untuk mendeklarasikan peristiwa. Namun, beberapa skenario mengharuskan Anda memiliki kontrol lebih atas perilaku terperinci peristiwa. Sintaks terakhir di bagian Sintaks dari topik ini, yang menggunakan kata kunci, menyediakan kontrol tersebut Custom 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 menaikkan peristiwa. Misalnya, lihat Cara: Mendeklarasikan Peristiwa Kustom Untuk Menghemat Memori dan Cara: Mendeklarasikan Peristiwa Kustom Untuk Menghindari Pemblokiran.

Contoh

Contoh berikut menggunakan peristiwa untuk menghitung mundur detik dari 10 hingga 0. Kode ini mengilustrasikan beberapa metode, properti, dan pernyataan terkait peristiwa. Ini termasuk RaiseEvent pernyataan.

Kelas yang menaikkan peristiwa adalah sumber peristiwa, dan metode yang memproses peristiwa adalah penanganan aktivitas. Sumber peristiwa dapat memiliki beberapa handler untuk peristiwa yang dihasilkannya. Saat kelas menaikkan acara, peristiwa tersebut dinaikkan pada setiap kelas yang telah dipilih untuk menangani peristiwa untuk instans objek tersebut.

Contoh ini juga menggunakan formulir (Form1) dengan tombol (Button1) dan kotak teks (TextBox1). Saat Anda mengklik tombol , kotak teks pertama menampilkan hitung mundur dari 10 hingga 0 detik. Ketika waktu penuh (10 detik) telah berlalu, kotak teks pertama menampilkan "Selesai".

Kode untuk Form1 menentukan status awal dan terminal formulir. Ini juga berisi kode yang dijalankan ketika peristiwa dinaikkan.

Untuk menggunakan contoh ini, buka proyek Windows Forms baru. Kemudian tambahkan tombol bernama Button1 dan kotak teks bernama TextBox1 ke formulir utama, bernama Form1. Kemudian klik kanan formulir dan klik Tampilkan Kode untuk membuka editor kode.

WithEvents Tambahkan variabel ke bagian deklarasi kelasForm1:

Public Class TimerExample
    Private WithEvents mTimer As TimerState

Tambahkan kode berikut ke kode untuk Form1. Ganti prosedur duplikat apa pun yang mungkin ada, seperti Form_Load atau Button_Click.

    Public Sub StartCountdownExample()
        mTimer = New TimerState()
        mTimer.StartCountdown(10.0, 1.0)
    End Sub

    Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
        Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
    End Sub

    Private Sub mTimer_Finished() Handles mTimer.Finished
        Console.WriteLine("Done")
    End Sub
End Class

Public Class TimerState
    Public Event UpdateTime(ByVal Countdown As Double)
    Public Event Finished()
    Public Sub StartCountdown(ByVal Duration As Double,
                              ByVal Increment As Double)
        Dim SoFar As Double = 0
        Do While SoFar < Duration
            System.Threading.Thread.Sleep(CInt(Increment * 1000))
            SoFar += Increment
            RaiseEvent UpdateTime(Duration - SoFar)
        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. Ketika waktu penuh (10 detik) telah berlalu, kotak teks pertama menampilkan "Selesai".

Nota

Metode My.Application.DoEvents ini tidak memproses peristiwa dengan cara yang sama seperti formulir. Untuk mengaktifkan formulir untuk menangani peristiwa secara langsung, Anda dapat menggunakan multithreading. Untuk informasi selengkapnya, lihat Utas Terkelola.

Lihat juga