Ismail Hamzah

.NET
See also: Other Geeks@INDC

Event Handling ASP.NET 2.0 Part 1

What is Event? 

Event adalah sebuah message yang dikirim oleh sebuah object untuk menandai kejadian sebuah aksi. Object yang membangkitkan event disebut sebagai Event Sender. Sedangkan object yang menangkap dan merespon pada event tersebut disebut sebagai Event Receiver. Kelas yang merupakan event sender tidak tahu object mana atau method mana yang akan menerima atau menangani event yang dia keluarkan. Yang dibutuhkan adalah perantara antara sender dan receiver. Perantara yang dimaksud kurang lebih sama seperti mekanisme pointer. .NET framework memperkenalkan tipe data “Delegate” yang akan memberikan fungsionalitas function pointer.

 

Delegate adalah sebuah kelas yang dapat menampung referensi (yaitu memory address) sebuah method. Beda dengan kelas-kelas lainnya, sebuah delegate memiliki signature. Referensi method yang dapat ditampung adalah referensi sebuah method dengan signature yang sama dengan signature yang dia miliki. Delegate memiliki banyak kegunaan dan Event Delegate adalah istilah yang digunakan untuk mengacu pada delegate yang digunakan untuk menangani Event Handling.

 

Event Delegate pada .NET framework memiliki dua buah parameter. Pertama adalah object yang merupakan sumber (sender/source) si event  dan kedua adalah data yang akan digunakan oleh event. Berikut adalah deklarasi dari delegate System.EventHandler.

 

delegate void EventHandler(object sender, EventArgs e);

 

What are the Ingredients? 

Dari sedikit introduction diatas maka terdapat dua buah kelas yang terlibat dalam event handling ini, yaitu pertama kelas yang merupakan sumber event dan kedua adalah kelas yang akan mengkonsumi atau menggunakan si event.

 
  1. Kelas Sumber Event (Sender/Source)
 

-         Mengandung deklarasi Event

-         Mengandung method yang akan membangkitkan Event. Method ini biasa diberi nama dengan tata cara penamaan sebagai berikut: “OnNamaEvent”

-         Method yang akan mengkonsumsi method “OnNamaEvent”

 
  1. Kelas Pengguna Event (Receiver)
 

-         Mengandung definisi handler. Handler adalah sebuah method yang akan diisikan (atau diikatkan) pada event. Oleh karena itu, handler harus memiliki signature yang sama dengan delegate yang digunakan oleh si event ( dengan kata lain harus memiliki signature yang sama dengan Event Delegate nya)

-         Mengandung method yang akan mengkonsumsi event. Satu hal yang harus ditekankan adalah di method inilah proses register (atau wiring) terjadi. Wiring adalah proses mengisikan alamat memory si handler ke si event.

   

Berikut adalah contoh proses Event Handling. Terdapat dua kelas yaitu pertama kelas KelasSumber yang merupakan source dan yang kedua adalah kelas EventHandlerNoData yang merupakan receiver.

 

using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
public partial class EventHandlerNoData : System.Web.UI.Page
{
    
}
 
public class KelasSumber
{
 

}

 

Source code lengkapnya adalah seperti berikut:

 

using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
public partial class EventHandlerNoData : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
 
    }
 
    // method yang hendak diisikan pada
    // event GantiNama, method semacam ini
    // biasa disebut "handler"
    protected void test(object sender, EventArgs e)
    {
        Label2.Text = "Event GantiNama Sudah Di panggil";
    }
    // method yang menggunakan event GantiNama
    protected void Button1_Click(object sender, EventArgs e)
    {
        KelasSumber TestClass = new KelasSumber();
        Label1.Text = "Nama Default:" + TestClass.Nama;
        // mengisikan method test pada event GantiNama
        TestClass.GantiNama += new EventHandler(test);
        TestClass.Rename("Muhammad Irfan");
        Label3.Text = "Nama Baru:" + TestClass.Nama;
    }
}
 
public class KelasSumber
{
    // data private
    private string _nama = "Ismail Hamzah";
    // properties untuk mengakses data private
    public string Nama
    {
        get
        {
            return _nama;
        }
    }
    
    // deklarasi event
    public event EventHandler GantiNama;
 
    // method yang akan membangkitkan si event
    protected void OnGantiNama()
    {
        EventHandler eh = GantiNama;
        if (eh != null)
        {
            // invokes the delegate
            eh(this, null);
        }
    }
    // method yang mengkonsumsi OnGantiNama
    public void Rename(string NewName)
    {
        _nama = NewName;
        OnGantiNama();
    }

}

 

Penjelasan kelas KelasSumber 

 

Deklarasi event

Sebuah event dideklarasikan dengan menggunakan kata kunci event dan menggunakan delegate sebagai tipe datanya.

 

public event EventHandler GantiNama;

 

Method OnNamaEvent

Method inilah yang akan membangkitkan event dengan cara memanggil object delegatenya. Dalam contoh diatas itu berarti object eh. Si object eh menerima dua buah parameter, yaitu pertama parameter this yang mengindikasikan bahwa kelas KelasSumber lah yang merupakan sumber si event. Yang kedua adalah parameter null yang mengindikasikan bahwa tidak ada data yang dilewatkan dalam proses event handling ini. Penjelasan lebih banyak mengenai hal ini dapat dibaca pada Event Handling ASP.NET 2.0 Part 2.

 

protected void OnGantiNama()
    {
        EventHandler eh = GantiNama;
        if (eh != null)
        {
            // invokes the delegate
            eh(this, null);
        }

    }

 

Method pengkonsumsi method OnNamaEvent

Method Rename adalah method yang mengkonsumsi method OnNamaEvent. Method Rename ini akan mengganti isi data private _nama dengan isi yang baru setelah itu akan memanggil method OnNamaEvent yang kemudian method OnNamaEvent akan membangkitkan event GantiNama.

 

public void Rename(string NewName)
    {
        _nama = NewName;
        OnGantiNama();

    }

 

Penjelasan kelas EventHandlerNoData 

 

Definisi handler

Dikelas ini terdapat definisi handler. Seperti telah disebutkan, handler adalah method yang akan diisikan pada event. Dengan kata lain, ketika method OnNamaEvent memanggil object delegate maka method handler lah yang akan dieksekusi. Hal ini bisa dilakukan jika sudah dilakukan wiring antara handler dengan event. Penekanan mengenai handler ini adalah bahwa signature si handler harus sama dengan signaturenya event delegate.

 

protected void test(object sender, EventArgs e)
    {
        Label2.Text = "Event GantiNama Sudah Di panggil";

    }

 

Method pengkonsumsi event

Method ini disebut method pengkonsumsi event karena pada method ini lah si event bangkit. Hal yang penting harus dilakukan pada fase ini adalah melakukan proses wiring atau registrasi handler pada event. Proses wiring secara sederhana dapat dikatakan sebagai proses mengisikan alamat memory dari si handler ke si event.

 

protected void Button1_Click(object sender, EventArgs e)
    {
        KelasSumber TestClass = new KelasSumber();
        Label1.Text = "Nama Default:" + TestClass.Nama;
        // mengisikan method test pada event GantiNama
        TestClass.GantiNama += new EventHandler(test);
        TestClass.Rename("Muhammad Irfan");
        Label3.Text = "Nama Baru:" + TestClass.Nama;
    }

 

   

 

Share this post: | | | |
Posted: Dec 07 2007, 11:13 AM by go2ismail | with 5 comment(s)
Filed under:

Comments

mh.irfan said:

Mantab...penjelasannya kang... btw ente ada bakat juga nih jadi writer... :D .Qta tunggu lagi loh "petuah" nya.. hehehe..

# December 7, 2007 4:43 PM

go2ismail said:

mh.irfan,

its a compliment or what? hehehe :-)

# December 7, 2007 4:48 PM

Joe said:

Penjelasannya cukup bisa dimengerti.

Keep up the good work..bro! :D

# December 7, 2007 10:02 PM

reyza said:

jangan lupa DNN-nya juga bro, kan di awal sudah janji mau nulis ttg DNN :)

# December 8, 2007 5:51 AM

go2ismail said:

Joe,

terimakasih untuk supportnya.

-------------------------------

reyza,

hihihi, jadi malu niy ditagihin. mas mic, mudah-mudahan sebelum DNN Cambrian release deh, hehehe. (iklan: DNN Cambrian akan "melingkupi": Social Networking & Widgets, Workflow, CRM, dynamic content localization, Enhanced Administration UI, Enhanced Skinning Engine)

# December 8, 2007 7:53 AM