Bagikan melalui


Peristiwa (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 alur eksekusi ditentukan oleh kemunculan 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 memicu event Click dan memanggil prosedur yang menangani event tersebut. Peristiwa juga memungkinkan tugas-tugas yang 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 Event kata kunci, 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 mengumumkan peristiwa. Di Visual Basic, Anda menghasilkan peristiwa dengan RaiseEvent pernyataan, seperti pada contoh berikut:

RaiseEvent AnEvent(EventNumber)

Peristiwa harus dimunculkan dalam cakupan kelas, modul, atau struktur tempat peristiwa dideklarasikan. Misalnya, kelas turunan tidak dapat memunculkan peristiwa yang diwarisi dari kelas dasar.

Pengirim Acara

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.

Pengendali Acara

Penanganan aktivitas adalah prosedur yang dipanggil ketika peristiwa yang sesuai terjadi. Anda dapat menggunakan subroutine 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 peristiwa.

Visual Basic menggunakan konvensi penamaan standar untuk penanganan aktivitas yang menggabungkan nama pengirim peristiwa, garis bawah, dan nama peristiwa. Misalnya, Click peristiwa tombol bernama button1 akan diberi nama Sub button1_Click.

Nota

Kami menyarankan agar Anda menggunakan konvensi penamaan ini saat menentukan penanganan aktivitas untuk peristiwa Anda sendiri, tetapi tidak diperlukan; Anda dapat menggunakan nama subroutine yang valid.

Mengaitkan Peristiwa dengan Pengelola Peristiwa

Sebelum pengendali acara dapat digunakan, Anda harus terlebih dahulu mengaitkannya dengan acara dengan menggunakan pernyataan Handles atau AddHandler.

WithEvents dan Klausul Handles

Pernyataan WithEvents dan Handles klausa menyediakan cara deklaratif untuk menentukan penanganan aktivitas. Peristiwa yang dimunculkan oleh objek yang dideklarasikan dengan WithEvents kata kunci dapat ditangani oleh prosedur apa pun dengan Handles pernyataan 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 Handles klausul sering kali menjadi pilihan terbaik untuk penanganan aktivitas karena sintaks deklaratif yang mereka gunakan membuat penanganan peristiwa lebih mudah dikodekan, dibaca, dan di-debug. Namun, perhatikan batasan berikut pada penggunaan WithEvents variabel:

  • Anda tidak dapat menggunakan WithEvents variabel sebagai variabel objek. Artinya, Anda tidak dapat menyatakannya sebagai Object—Anda harus menentukan nama kelas saat 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 menggunakan WithEvents atau Handles untuk menangani peristiwa dari Structure. Dalam kedua kasus, Anda dapat menggunakan pernyataan AddHandler untuk menangani peristiwa tersebut.

  • Anda tidak dapat membuat array variabel WithEvents.

WithEvents variabel memungkinkan penanganan aktivitas tunggal 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 tersebut terbatas pada 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 WithEvents variabel 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 mirip dengan klausul Handles yang memungkinkan Anda menentukan penanganan kejadian. 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 bersama atau acara 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. Penangan kejadian menangani kejadian dan menampilkan pesan.

Kemudian penanganan peristiwa pertama dihapus dan penanganan peristiwa yang berbeda dikaitkan dengan peristiwa tersebut. Saat peristiwa dinaikkan lagi, pesan yang berbeda akan ditampilkan.

Terakhir, penanganan aktivitas kedua dihapus dan peristiwa 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 Diwariskan dari Kelas Dasar

Kelas turunan—kelas yang mewarisi karakteristik dari kelas dasar—dapat menangani peristiwa yang diangkat oleh kelas dasar mereka menggunakan Handles MyBase pernyataan .

Untuk menangani peristiwa dari kelas dasar

  • Deklarasikan penanganan aktivitas di kelas turunan Handles MyBase. dengan menambahkan pernyataan nama peristiwa ke baris deklarasi prosedur penanganan aktivitas Anda, di mana nama peristiwa 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
    
Judul Deskripsi
Panduan: Mendeklarasikan dan Mengaktifkan Acara Memberikan deskripsi langkah demi langkah tentang cara mendeklarasikan dan mengaktifkan peristiwa untuk kelas.
Panduan Langkah-demi-Langkah: Menangani Acara 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 Pengendali Acara yang Diwariskan di Visual Basic Mencantumkan masalah umum yang muncul dengan penanganan aktivitas dalam komponen yang diwariskan.
Peristiwa Memberikan gambaran umum model peristiwa di .NET Framework.
Membuat Pengendali Acara di Windows Forms Menjelaskan cara bekerja dengan peristiwa yang terkait dengan objek Windows Forms.
Delegasi Menyediakan gambaran umum delegasi di Visual Basic.