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 sebagai Object—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 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 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
    
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.