Untuk para programmer yang sebelumnya berkecimpung di dunia VB 6.0 mungkin salah satu hal yang wajib dipelajari yaitu mengenai Event dan Event Handler. Mungkin selama ini kita buat event handler dengan cara yang standard. Artinya kita cukup cari nama event yang akan digunakan untuk object yang bersangkutan lewat properties window atau Code Viewer di Visual Studio.
Berikut adalah event handler untuk event click kontrol Button :
Private Sub btnSave_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnSave.Click
End Sub
yang harus diperhatikan oleh VB 6 programmer yaitu keyword Handles. Keyword tersebut merupakan kunci assignment sebuah event handler dengan event nya. Anda bebas untuk mengubah nama event handler nya selama keyword Handles nya merujuk ke event dari object yang anda inginkan. Hal ini berbeda sekali dengan VB 6, bila anda ganti nama event handler nya maka prosedur tersebut tidak akan pernah di ekseskusi.
Misalkan saya memiliki tiga buah control Button dengan masing-masing event handler nya untuk event Click seperti dibawah ini :
Private Sub btnSave_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnSave.Click
MsgBox("Save")
End Sub
Private Sub btnDelete_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnDelete.Click
MsgBox("Delete")
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnCancel.Click
MsgBox("Cancel")
End Sub
Bila business rule dari ketiga event handler tersebut mirip dan kontrol nya juga sama, apakah kode diatas cukup efektif? Mungkin kita bisa buat cara lain untuk menghemat space code designer :)) bagaimana caranya? Kita bisa buat satu buah event handler yang menangani lebih dari satu event untuk masing-masing kontrol. Intinya terdapat pada Handles keyword :
Private Sub ClickEventHandler(ByVal sender As Object, ByVal e As EventArgs) _
Handles btnSave.Click, btnCancel.Click, btnDelete.Click
End Sub
Setelah Handles keyword anda tinggal definisikan event-event yang akan dibuatkan handler nya dari masing-masing kontrol dengan dipisahkan dengan tanda koma. Lalu sekarang bagaimana caranya kita mengetahui control mana yang mentrigger event tsb? Dengan variabel sender yang terdapat pada parameter pertama di prosedur tsb. Yang harus dilakukan adalah melakukan casting explicit ke kontrol yang mentrigger event tsb. Setelah didapatkan object nya maka kita dapat memanfaatkan properti yang dimiliki oleh kontrol tsb untuk identifikasi. Properti yang mudah dan umum digunakan yaitu properti Name. Berikut code nya :
Private Sub ClickEventHandler(ByVal sender As Object, ByVal e As EventArgs) _
Handles btnSave.Click, btnCancel.Click, btnDelete.Click
Dim aButton = DirectCast(sender, Button)
Select Case aButton.Name.ToLower
Case "btnsave"
MsgBox("Save")
Case "btncancel"
MsgBox("Cancel")
Case "btndelete"
MsgBox("Delete")
End Select
End Sub
Lebih menghemat space kan :D ? Kode ini saya buat dengan VB 9.0, jadi variabel aButton tersebut tipe datanya langsung di Infer oleh si CLR. Cara lainnya gimana nih? Apakah ada cara lain untuk assignment event handler terhadap sebuah event? Ada...cara ini berguna kalau anda ingin membuat event handler secara dinamis. Pertama anda buat terlebih dahulu event handler nya dengan signature yang sama tanpa keyword Handles :
Private Sub ClickEventHandler(ByVal sender As Object, ByVal e As EventArgs)
Dim aButton = DirectCast(sender, Button)
Select Case aButton.Name.ToLower
Case "btnsave"
MsgBox("Save")
Case "btncancel"
MsgBox("Cancel")
Case "btndelete"
MsgBox("Delete")
End Select
End Sub
Setelah itu langkah yang harus dilakukan yaitu proses assignmentnya. Gunakan AddHandler keyword. Anda bisa tempatkan perintah tersebut dimana saja. Contoh berikut saya tempatkan di event Load dari form yang digunakan :
Private Sub EventAndEventHandler_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
AddHandler btnSave.Click, AddressOf ClickEventHandler
AddHandler btnCancel.Click, AddressOf ClickEventHandler
AddHandler btnDelete.Click, AddressOf ClickEventHandler
End Sub
Perintah AddressOf merupakan sebuah object Delegate. Lalu ada seseorang bertanya pada saya...Pak disitu pake perintah AddHandler, berarti ada dong perintah lainnya yang berseberangan dengan perintah tsb?? Ada...RemoveHandler jawabannya :)
Perintah Remove Handler digunakan untuk "memutuskan" asosiasi antara event dengan event handler nya. Hal tersebut berguna agar tidak terjadi proses assignment event handler lebih dari satu kali. Penulisan kode nya sama, seperti berikut :
Private Sub btnRemoveHandler_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles btnRemoveHandler.Click
RemoveHandler btnSave.Click, AddressOf ClickEventHandler
RemoveHandler btnCancel.Click, AddressOf ClickEventHandler
RemoveHandler btnDelete.Click, AddressOf ClickEventHandler
End Sub
Begitulah ceritanya ;) ... anda tinggal memlilih cara mana yang sesuai dengan kebutuhan aplikasi tersebut. C U on the next articles ;)