C# ile kendi olayımızı tanımlayalım

Yazar : zafer 24. Ekim 2011 15:28

Bu yazımda okuyanlara C# dilinde olay tanımı ve kullanımı hakkında bilgiler vermeye çalışacağım. Aslında olayları program geliştirirken sık sık kullanıyoruz. Örneğin bir düğmeye (Button) tıklanınca bir takım işler yaptırmak istediğimizde bu isteğimizi gerçekleştirmek için düğmenin tıklama (click) olayını kullanıyoruz. Bunun gibi program geliştirirken kullandığımız bir çok birleşenin bize sunduğu olayları kullanarak gerekli işlemlerin yapılmasını sağlıyoruz.


Olayların bu gücünden geliştirmiş olduğumuz kendi nesnelerimizde de faydalanmak istersek, nesnelerimiz için kendi olay tanımlarımızı yazmamız gerekir. Bu yazıda amacım bunun nasıl yapılabildiğini anlatmak ve küçük bir uygulama yapmak.


Bu konuyu bir örnek üzerinden anlatmanın daha anlaşılır olacağını düşündüğüm için örnek bir senaryo hazırladım. Senaryomuz şöyle; MeyveSepeti adında bir sınıfımız var. Bu sınıf gönderdiğimiz listedeki meyveleri sepete ekliyor. Bizim amacımız her bir meyve sepete eklendikten sonra eklenen meyve hakkında bilgi sahibi olmak, bunun içinde önce sınıfımıza özel bir olay tanımlayacağız. Ardından her meyve ekleme işleminden sonra bu olayı tetikleyeceğiz. Bu işlemleri yaptıktan sonra arayüz tarafına geçip bu olayı yakalayacağız ve yapmak istediğimiz işlemleri gerçekleştireceğiz.


Öncelikle işe bir temsilci (delegate) tanımlayarak başlıyoruz.

 

public delegate void temSepeteMeyveEklendi(EklemeArguman e);

 

SepeteMeyveEklendi isimli bir temsilci tanımladık, temsilcimiz EklemeArguman türünden bir parametre alıyor. Bu türüde biz hazırlıyoruz, olay parametreleri EventArgs sınıfından türeyen bir sınıf olmalıdır. Burada parametre türünün bir sınıf olarak ele alınması olaylarımızı yazarken bize çok daha geniş ve esnek bir geliştirme imkanı sağlamaktadır. Bizim örnek parametre sınıfımız aşağıdaki gibi,

 

class EklemeArguman : EventArgs
{
        public string EklendiMesaji { get; set; }

        public EklemeArguman(string mesaj)
        {
            EklendiMesaji = mesaj;
        }
}

 

Bu işlemlerden sonra şimdi sırada olay tanımımız var. Olay tanımını aşağıda gördüğünüz gibi daha önce tanımladığımız temsilci (delege) türünden bir değişken olarak tanımlıyoruz.

 

public event temSepeteMeyveEklendi SepeteMeyveEklendi;

 

Gördüğünüz gibi temsilcimizden yararlanarak bir olay tanımladık. Bu işlemin ardından olay tanımını tamamlamak için son işlemimiz bir olay tetikleyici metot hazırlamak olacak. Bu metodumuzda aşağıdaki gibi,

 

private void SepeteEklendiTetikle(string mesaj)
{
	if (SepeteMeyveEklendi != null)
        {
        	SepeteMeyveEklendi(new EklemeArguman(mesaj));
	}
}

 

Bu metot olayı kontrol ettikten sonra kendisine gönderilen mesajıda ekleyerek bir olay fırlatıyor. Peki mu metot nasıl çalışıyor? Aslında olayın kalbi bu metot ve bizde bu metodu olayımızın oluştuğu yerde çağırarak olayı başlatıyoruz. Bizim örneğimiz için bu olay tetikleyiciyi sepeti doldurduğumuz yerde şöyle çağırıyoruz,

 

public void SepeteEkle(string[] meyveListesi)
{
    for (int i = 0; i < meyveListesi.Length; ++i)
    {
        // Meyveleri sepete ekle
        SepeteEklendiTetikle(meyveListesi[i]);
    }
}

 

Bu işlerlerin ardından sınıfımıza özel bir olay tanımlamış ve meyveleri sepete ekleme esnasında bu olayı aktif hale getirmiş oluyoruz. Şimdi yapmamız gereken sınıfımızı kullandığımız yerde oluşturduğumuz yeni nesneye olayımızı bağlamak, ardından ekleyeceğimiz olay metodumuzun içinde istediğimiz işlemleri gerçekleştirmek. Örneğimiz için test kodu şöyle,

 

private void btnMeyveEkle_Click(object sender, RoutedEventArgs e)
        {
            string[] meyveListe = { "Elma", "Armut", "Muz", "Kiraz", "Vişne" };

            MeyveSepeti sepet = new MeyveSepeti();
            sepet.SepeteMeyveEklendi += new MeyveSepeti.temSepeteMeyveEklendi(sepet_SepeteMeyveEklendi);

            sepet.SepeteEkle(meyveListe);
        }

Burada yeni bir nesne oluşturup bu nesneye olayımızı bağlıyoruz. Sonrasında meyveleri sepete eklemeye başlıyoruz. Bu olay için işletilecek metot şöyle,

 

void sepet_SepeteMeyveEklendi(EklemeArguman e)
{
    MessageBox.Show(e.EklendiMesaji + " sepete eklendi.");
}

Burada basitçe olay her tetiklendiğinde gelen mesajı ekranda gösteriyoruz. Hepsi bu kadar, sorularınız olursa yardımcı olmaya çalışrım.

 

Microsoft Visual Studio 2010 Projesi :  Wpf_Olay.rar (47,80 kb)

Tags: , ,

Wpf

Yorum ekle




  Country flag
biuquote
  • Yorum
  • Canlı önizleme
Loading


Zafer Günlükleri © 2008 - 2012 Zafer'in kişisel paylaşım sitesi.
BlogEngine.NET 2.0.0.36 | Tema : Mads Kristensen | Düzenleyen : Zafer Çelenk
Oturum Aç | APML ile filtrele

Anket

D dilini duydunuz mu?




Sonuçlar

Projeler

Galeri

Takvim

<<  Şubat 2012  >>
PaSaÇaPeCuCuPa
303112345
6789101112
13141516171819
20212223242526
2728291234
567891011

Yazıları takvimde göster

Satranç

I play chess at Chess.com!

Son Yorumlar

Comment RSS

Yasal Uyarı

Bu site görüşlerin paylaşıldığı kişisel bir blogdur. Site içeriğinden meydana gelebilecek sorunlardan site sahibi sorumlu değildir. Yorumlar site sahibi tarafından onaylandıktan sonra yayınlanacaktır.