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

VB - .NET Framework , Posted at : Nov/19/2008  
1437 Views   3 Comments

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 !! ;)

 


[Comments]
deddy  Jan/08/2009 03:15:02 :
mas ini berlaku juga untuk .net 2003 gak ya....???
Rully  Jan/08/2009 04:30:52 :
Halo mas Deddy...ini berlaku untuk semua versi .net :)
Rully  Jan/08/2009 04:33:21 :
@Deddy : O ya mas, kecuali syntax ini hanya berlaku di vb 9.0 : Dim myOrder = New Order With {.Quantity = -1}...code tersebut menggunakan fitur Local Type Inference dan Object Initialization Expression...kedua fitur tersebut ada artikelnya di web site ini :)

[Write your comment]
Name (required)
Email (required-will not published)
 
Comment

GYIR
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
My Name is Rully Yulian Muhammad Firmansyah. I am an IT Trainer, IT Consultant and Application Developer spesializing in Microsoft .NET technology and SQL Server database. I live in Bandung, Indonesia. My hobby is to play Guitar. [Read More...]
Top Download 
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 3175 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 2592 times  
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 2180 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 2127 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 1806 times  
Article Category 
Links 
Award 
Certifications 
MOS 2007
MCAS
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News