Create VB.NET Event Handler In Various Way

Posted at : Nov/19/2008
6872 Views | 8 Comments

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


[Comments]

madhi (Nov/20/2008 08:07:31)
wah, artikel yang bagus. saya sampe sekarang masih pake vb 6.0 dan biasa menggunakan array object. dengan cara diatas bisa dipakai sebagai pengganti model coding yang biasa saya lakukan di vb 6.0 Private Sub Tombol_Click(Index As Integer) select case Index case 0 case 1 .... end select
Rully (Nov/20/2008 09:30:30)
@madhi : Halo mas madhi :)...segera upgrade skill ke vb.net mas :D...o ya di vb.net sudah tidak lagi mengenal control array seperti halnya di vb classic ;)
Mr. Murdock (Nov/20/2008 09:31:55)
Saya adalah orang yang baru belajar pemrograman VB/ASP.NET. Saya sangat menyukai artikel2 yang ditampilkan oleh Mas Rully ini, salam hormat selalu. Jangan sungkan2 mas klo bisa menuliskan artikel2 lain yang sangat mendasarpun akan sangat berguna bagi kami. Jika saya secara langsung tidak bisa membalas kebaikan anda, tapi Yang di atas sana pasti maha tau.
Rully (Nov/21/2008 03:05:03)
@Mr.Murdock : Halo Mr.Murdock, salam kenal :)...thx for the comment. Posting artikel-artikel di web site saya ini merupakan "hobi" saya :) jadi selalu saya isi dengan sesuatu yang saya ketahui untuk di share ke semua orang yang membutuhkan...
Gunawan (Nov/21/2008 03:58:12)
Apakah cara tersebut bisa juga diterapkan dalam ASP.Net??
Rully (Nov/21/2008 04:36:02)
@Gunawan : Bisa sekali mas ;)
tom (Oct/15/2009 07:25:38)
To Mas ruly, Pak Rully, Minta tolong dong kasih satu contoh Program untuk akses database mulai proses input, edit dan delete untuk satu tabel aja sebagai contoh yang menggunakan OOP murni dengan vb dot net 2005 dong. Atau kalau ada link yang bisa jadi referensi yang mudah. Thank's
Marcellina Yoanita (Jul/02/2015 10:55:18)
Saya tertarik dengan tulisan anda mengenai Teknologi. Teknologi merupakan suatu ilmu yang sedang berkembang di zaman yang sudah maju sekarang ini. Saya memiliki beberapa tulisan sejenis mengenai Teknologi yang dapat dilihat di <a href="www.ejournal.gunadarma.ac.id">www.ejournal.gunadarma.ac.id</a>

 


[Write your comment]

Name (required)

Email (required-will not published)

 
Comment
46XE
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6982 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4893 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4045 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3460 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2881 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

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