Create Your Own Event and Event Handler With Your Own Delegate In VB.NET

Posted at : Nov/19/2008
3317 Views

Salah satu implementasi dari delegate ialah membuat event handler yang menangani event dengan signature yang telah ditentukan. Delegate merupakan sebuah type. Implementasi lain dari delegate ialah Callback mechanism. Namun pada artikel kali ini saya akan membahas implementasi delegate untuk event dan event handler.

Bayangkan anda mempunyai sebuah class. Di dalam class tersebut terdapat sebuah property dimana proses assignment valuenya harus divalidasi dengan sebuah rule tertentu, lalu anda ingin propagate notifikasi ke user jika validasinya tidak valid berupa message errornya. Ok...mari kita buat class yang sederhana :

Public Class Order

Private mQty As Integer
Public Property
Quantity() As Integer
Get
Return
mQty
End Get
Set
(ByVal value As Integer)
mQty = value
End Set
End Property

End Class

Misalkan aplikasi punya rule bahwa untuk memberikan nilai pada properti Quantity valuenya harus lebih besar nol, lalu notifikasi error message nya kita deliver ke user bila rule tersebut tidak dipenuhi. Bagaimana langkah2nya? Pertama buat terlebih dahulu delegate object nya :

Public Class Order

Private Delegate Sub MyDelegateSub(ByVal Message As String)

Delegate yang saya buat signature nya berupa sebuah Sub yang memiliki satu buah input parameter dengan tipe data string. Langkah kedua buat event yang kita definisikan sendiri namanya dimana event handler yang akan dibuat nantinya harus sesuai dengan signature delegate diatas :

Public Class Order

Private Delegate Sub MyDelegateSub(ByVal Message As String)
Private Event MustBeGTZero As MyDelegateSub

Langkah berikutnya buat event handler nya. Ingat syarat diatas :

Public Class Order

Private Delegate Sub MyDelegateSub(ByVal Message As String)
Private Event MustBeGTZero As MyDelegateSub

Private Sub MustBeGTZeroHandler(ByVal Notification As String)
MsgBox(Notification)
End Sub

Signature event handler sama dengan delegate (berupa Sub dengan satu buah input parameter yang bertipe data string, untuk nama input parameternya ga harus sama).

Next step is, lakukan proses validasi pada Setter property. Disini kita harus lakukan assignment event handler dengan event secara run time, raise event, setelah itu disassociate event handler dengan eventnya, berikut code lengkapnya :

Public Class Order

Private Delegate Sub MyDelegateSub(ByVal Message As String)
Private Event MustBeGTZero As MyDelegateSub

Private Sub MustBeGTZeroHandler(ByVal Notification As String)
MsgBox(Notification)
End Sub

Private
mQty As Integer
Public Property
Quantity() As Integer
Get
Return
mQty
End Get
Set
(ByVal value As Integer)
If value <= 0 Then
AddHandler
MustBeGTZero, AddressOf MustBeGTZeroHandler
RaiseEvent MustBeGTZero("Input harus lebih besar dari Nol")
RemoveHandler MustBeGTZero, AddressOf MustBeGTZeroHandler
Else
mQty = value
End If
End Set
End Property

End Class

Untuk trigger event yang telah kita buat gunakan perintah RaiseEvent. Berikut contoh penggunaannya di aplikasi client :

Private Sub btnGetOrder_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnGetOrder.Click
Dim myOrder = New Order With {.Quantity = -1}
End Sub

Kembali saya menggunakan VB 9.0. Kode diatas menggabungkan fitur Local Type Inference dengan Object Initialization Expression. Screen shot nya seperti dibawah ini :

Happy Coding VB-ers !! ;)

 


ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Co-Founder & IT Trainer at Native Enterprise | Microsoft Azure Data Scientist | IBM RAG & Agentic AI | IBM Data Science & Data Analyst | Python Certified (PCEP, PCAP) | MOS, MTA, Xamarin Certified, ex MCT | ex MVP

CERTIFICATIONS

Microsoft Certified Associate
IBM RAG and Agentic AI Professional
IBM Data Science Professional IBM Data Analyst Professional
PCAP Associate Python Programmer Certified PCEP Entry Level Python Programmer Certified
Xamarin Certified
MOS 2007
MCPD MCTS
MCAD.NET

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  X Twitter Facebook  Instagram  LinkedIn

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2026   Rully Yulian MF   All rights reserved.