Bagikan melalui


Cara berlangganan peristiwa dan menanganinya di Visual Basic

Peristiwa adalah tindakan atau kemunculan — seperti klik mouse atau batas kredit terlampaui — yang dikenali oleh beberapa komponen program, dan untuk itu Anda dapat menulis kode untuk merespons. Penangan peristiwa adalah kode yang Anda tulis untuk merespons peristiwa.

Di Visual Basic, ada dua sisi untuk bekerja dengan event:

  • Event publishing — Kelas mendeklarasikan event dan memicunya ketika sesuatu yang menarik terjadi menggunakan Pernyataan RaiseEvent. Inilah yang sebenarnya memanggil pengendali acara.
  • Langganan peristiwa — Anda berlangganan peristiwa dengan mengidentifikasi prosedur sebagai penangan untuk peristiwa tertentu. Anda dapat melakukan ini baik dengan Handles klausul dan WithEvents variabel, atau dengan Pernyataan AddHandler.

Penangan kejadian dalam Visual Basic adalah sebuah prosedur Sub. Kode Anda tidak memanggilnya secara langsung seperti prosedur Sub lainnya. Sebaliknya, penerbit peristiwa memanggil prosedur ketika peristiwa terpicu karena prosedur berlangganan peristiwa tersebut.

Klausul Handles adalah cara default untuk berlangganan event di Visual Basic. Ini adalah bagaimana penanganan aktivitas ditulis oleh perancang ketika Anda memprogram di lingkungan pengembangan terintegrasi (IDE). Pernyataan AddHandler ini cocok untuk berlangganan event secara dinamis selama waktu proses eksekusi.

Ketika peristiwa terjadi, Visual Basic secara otomatis memanggil prosedur penanganan aktivitas. Kode apa pun yang memiliki akses ke peristiwa dapat menyebabkannya terjadi dengan menjalankan Pernyataan RaiseEvent.

Anda dapat mengaitkan lebih dari satu penanganan aktivitas dengan peristiwa yang sama. Dalam beberapa kasus, Anda dapat memisahkan pengelola (handler) dari suatu peristiwa. Untuk informasi selengkapnya, lihat Peristiwa.

Berlangganan ke acara menggunakan Handles dan WithEvents

  1. Pastikan peristiwa dideklarasikan dengan Pernyataan Peristiwa.

  2. Deklarasikan variabel objek pada tingkat modul atau kelas, menggunakan WithEvents kata kunci. Klausa As untuk variabel ini harus menentukan kelas yang menaikkan peristiwa.

  3. Dalam deklarasi prosedur penanganan Sub event, tambahkan Handles klausa yang menentukan variabel WithEvents dan nama event.

  4. Ketika peristiwa terjadi, Visual Basic secara otomatis memanggil Sub prosedur. Kode Anda dapat menggunakan RaiseEvent pernyataan untuk menaikkan peristiwa dan memanggil semua handler berlangganan.

    Contoh berikut mendefinisikan peristiwa dan WithEvents variabel yang merujuk ke kelas yang menaikkan peristiwa. Prosedur penanganan Sub peristiwa menggunakan klausul Handles untuk menentukan kelas dan peristiwa yang ditanganinya.

    ' Example showing event handling with Handles and WithEvents
    Public Class EventPublisher
        Public Event SomethingHappened()
        
        Public Sub CauseEvent()
            ' Raise the event when something interesting happens
            RaiseEvent SomethingHappened()
        End Sub
    End Class
    
    Public Class EventSubscriber
        ' Declare a WithEvents variable
        Dim WithEvents eventObj As New EventPublisher
        
        ' Handle the event using Handles clause
        Public Sub ProcessHappen() Handles eventObj.SomethingHappened
            ' Insert code to handle somethingHappened event.
            Console.WriteLine("Event handled using Handles clause!")
        End Sub
        
        Public Sub TriggerEvent()
            eventObj.CauseEvent()
        End Sub
    End Class
    

Berlangganan ke acara menggunakan AddHandler

  1. Pastikan peristiwa dideklarasikan dengan Event perintah.

  2. Jalankan pernyataan AddHandler untuk menghubungkan prosedur penanganan Sub peristiwa secara dinamis dengan peristiwa.

  3. Ketika peristiwa terjadi, Visual Basic secara otomatis memanggil Sub prosedur. Kode Anda dapat menggunakan pernyataan RaiseEvent untuk memicu peristiwa dan memanggil semua pengolah yang berlangganan.

    Contoh berikut menggunakan pernyataan AddHandler di konstruktor untuk mengaitkan OnTimerElapsed prosedur sebagai penanganan aktivitas untuk peristiwa timer kustom.

    ' Example showing event handling with AddHandler
    Public Class Timer
        Public Event TimerElapsed(ByVal message As String)
        
        Public Sub Start()
            ' Simulate timer elapsed
            RaiseEvent TimerElapsed("Timer has elapsed!")
        End Sub
    End Class
    
    Public Class Application
        Private appTimer As New Timer()
        
        Sub New()
            ' Use AddHandler to dynamically associate event handler
            AddHandler appTimer.TimerElapsed, AddressOf OnTimerElapsed
        End Sub
    
        Private Sub OnTimerElapsed(ByVal message As String)
            ' Insert code to handle timer elapsed event
            Console.WriteLine($"Handling timer event: {message}")
        End Sub
        
        Public Sub StartTimer()
            appTimer.Start()
        End Sub
    End Class
    

    Anda dapat memisahkan penanganan aktivitas dari peristiwa dengan menjalankan pernyataan RemoveHandler.

Lihat juga