Wednesday, August 3, 2011

Event Besar Dalam C#.Net

csharp_logoDalam bahasa pemrograman C# yang dibuat oleh Microsoft, terdapat sebuah istilah magis, “ event” di hampir semua object yang terdapat dalam GUI components-nya. Apa yang dimaksudkan dengan event ini ? Event memungkin class dalam memberikan peringatan terhadap aplikasi yang menggunakan class tersebut tentang terjadinya situasi yang menarik dalam class itu. Jika dicontohkan dapat berupa event click dalam button yang terdapat dalam GUI. Event tersebut akan berjalan apabila button tersebut ditekan ( di – klik ). Tidak hanya event dengan click, apabila user sedang mengarahkan mouse ke object GUI yang bersangkutan, maka event mouse hover akan dieksekusi. Selain itu, event juga meningkatkan modularitas dari suatu program.
Sebelum mempelajari Event, ada baiknya mempelajari konsep delegate terlebih dahulu, karena event berkaitan erat dengan delegate.
Untuk memulai, kita harus membuat sebuah class baru yang merupak turunan dari ArrayList dalam System.Collection. Dan class ini memiliki event yang mampu mendeteksi terjadinya perubahan terhadap data yang ia simpan, sekecil apapun perubahannya.

List With Event

  1. Buat sebuah Project Console Baru, beri nama sesuka andaimage
  2. Buat sebuah class baru, Beri nama ListWithEvent.cs imageimageimage
  3. Tambahkan referensi ke System.Collections menggunakan keyword, usingimage
  4. Karena class yang baru ini merupakan turunan dari Arraylist, maka ganti deklarasi class menjadi :
       1: public class ListWithEvent:ArrayList
       2:     {
       3:  
       4:     }

  5. Lalu, tepat di atas baris public class ListWithEvent : ArrayList tersebut tambahkan syntax untuk mendeklarasikan delegate :
    public delegate void ChangedEventHandler(object sender, EventArgs e);


  6. Selanjutnya copy-paste code berikut dalam class ListWithEvent, comment yang terdapat dalam code akan menjelaskan fungsi masing-masing method :


    public class ListWithEvent:ArrayList
    {
    /// <summary>
    /// Merupakan deklarasi delegate bernama Changed
    /// dalam deklarasinya daripada menggunakan kata kunci 
    /// void atau fungsi-fungsi yang lain, di sini digunakan kata kunci
    /// "event" dengan fungsi yang sama saja dengan void atau funsgi
    /// </summary>
    public event ChangedEventHandler Changed;
     
    /// <summary>
    /// merupak method yang berfungsi mengecek apakah
    /// event handler sudah terisi dengan method. Jika ya, 
    /// maka method ini bertugas memanggil fungsi yang terlibat.
    /// </summary>
    protected virtual void OnChanged(EventArgs e)
    {
    if (Changed != null)
    Changed(this, e);
    }
     
    /// <summary>
    /// Sebenarnya merupakan method yang berasal dari System.Collections.ArrayList
    /// dan bertujuan untuk memasukkan item baru ke dalam daftar. Tetapi karena kita 
    /// harus membuat event berjalan setiap kali data dalam  ArrayList berubah atau bertambah,
    /// maka method ini di-override sambil tetap menjalankan method dalam base classnya
    /// </summary>
    public override int Add(object value)
    {
    int i = base.Add(value);
    OnChanged(EventArgs.Empty);
    return i;
    }
     
    /// <summary>
    /// Sama dengan method di atas, method clear dari System.Collections.ArrayList class
    /// di - override karena terjadi perubahan dalam ArrayList
    /// </summary>
    public override void Clear()
    {
    base.Clear();
    OnChanged(EventArgs.Empty);
    }
    /// <summary>
    /// Untuk memperlihatkan data yang terdapat dalam List
    /// </summary>
    public void ShowData()
    {
    Console.WriteLine("List Berisi :");
    foreach (Object data in this)
    {
    Console.Write(string.Format(" {0} ", data.ToString()));
    }
    Console.WriteLine();
    }
    /// <summary>
    /// Bertujuan untuk menjalankan event ketika terjadi perubahan terhadap sebuah data 
    /// dalam list menggunakan operasi array[int index] = value.
    /// Kita tidak dapat mengakses langsung variabel-variabel yang terdapat dalam arrayList
    /// karenanya digunakan accessor ( pasangan get; set; )
    /// </summary>
    public override object this[int index]
    {
    set
    {
    base[index] = value;
    OnChanged(EventArgs.Empty);
    }
    }
    }


  7. Deklarasikan instance dari class yang baru dibuat dalam class program utama


    static void Main(string[] args)
    {
    ListWithEvent list = new ListWithEvent();
    }


  8. Untuk dapat mempergunakan class yang baru saja dibuat, event delegate , Change, harus di beri masukan berupa nama method yang akan dijalankan setiap kali event terjadi. ‘Pemberian; method tersebut menggunakan operator += . Dalam contoh ini, method yang akan digunakan untuk meng-handle  event dari perubahan data bernama OnListChanged


    static void Main(string[] args)
    {
    ListWithEvent list = new ListWithEvent();
    list.Changed += new ChangedEventHandler(OnListChanged);
    }

  9. Sekarang, anda sebenarnya sudah bebas untuk melakukan perubahan yang anda mau dengan List.

    static void Main(string[] args)
    {
    ListWithEvent list = new ListWithEvent();
    list.Changed += new ChangedEventHandler(OnListChanged);
    list.Add("ITEM 1");
    list.Add("ITEM 2");
    }
  10. Setelah itu lepaskan method OnListChanged dari object dengan operator -=

    static void Main(string[] args)
    {
    ListWithEvent list = new ListWithEvent();
    list.Changed += new ChangedEventHandler(OnListChanged);
    list.Add("ITEM 1");
    list.Add("ITEM 2");
    list.Changed -= new ChangedEventHandler(OnListChanged);
    }


  11. Sekarang method yang meng-handle event akan dibuat di dalam class Program. Tepat di bawah tanda kurung kurawal (curly bracket) terakhir method di atas ( } ) tambahkan syntax berikut :


    private static void OnListChanged(object sender, EventArgs e)
    {
    Console.WriteLine("Terjadi Perubahan data!");
    }




  12. Tekan tombol Ctrl-F5 untuk men-compile program. Jika event ini berhasil maka akan muncul tulisan :image




  13. Berikut code lengkap programnya :

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace EventsTutorial
    {
    class Program
    {
    static void Main(string[] args)
    {
    ListWithEvent list = new ListWithEvent();
    list.Changed += new ChangedEventHandler(OnListChanged);
    list.Add("ITEM 1");
    list.Add("ITEM 2");
    list.Changed -= new ChangedEventHandler(OnListChanged);
    }
    private static void OnListChanged(object sender, EventArgs e)
    {
    Console.WriteLine("Terjadi Perubahan data!");
    }
    }
    }

No comments:

Post a Comment