Event'lar yani olaylar önceden belirlenmiş şartlar oluştuğunda sistem tarafından otomatik olarak çalıştırılan fonksiyonlardır. Bu fonksiyonların çalışmalarını düzenleyebilmek için bir Property(Özellik) ile koordineli olarak çalışmaları gereklidir. Önceki yazılarımızda C# dilinde nasıl bileşen oluşturacağımızdan bahsetmiştik. Hatta örnek bileşenimizi oluştururken kendi belirlediğimiz özellikler eklemiş ve bunların naısl çalıştığını görmüştük. Şimdi ise yine bizim oluşturduğumuz bileşenlere nasıl kullanıcı tanımlı olaylar eklenebileceğini inceleyeceğiz. Bir bileşene olay tanımlayabilmek için temsilcilerden faydalanmak durumundayız. Önceki yazımızda bundan bahsetmiştik temsilci ile ilgili bilgilerinizi tekrar gözden geçirmek isterseniz http://olcayguzel.blogspot.com/2011/04/c-delegate.html adresindeki makaleye gözatabilirsiniz. Şimdi gelelim nasıl olay oluşturacağımıza.
Şimdi oluşturacağımız olay şu işi yapacak: Hatırlarsanız önceki makalemizde yapılan bir işlemin devam ettiğini kullanıcılara bildireceğimiz bir bileşen hazırlamıştık. Varsayılan olarak üzerinde "İşleminiz devam ediyor. Lütfen bekleyiniz" yazıyordu ancak programcı isterse bu yazıyı değiştirebiliyordu. Bileşenin olaylarını incelediğinizde başlık değiştiğinde çalışacak bir olay olmadığını farketmişsinizdir. Çünkü herhangi bir olay tanımlamamıştık. Şimdi bu eksikliği kapatacağız ve "BaslikDegistiginde" adıyla bir olay oluşturacağız.
Daha önce de söylediğimiz gibi olayları etkin bir şekilde kullanabilmek için tanımlayacağımız özelliklerle birlikte kullanmalı. Kullanılan özellik değiştiğinde tanımlayacağımız olayın tetiklenmesini sağlamalıyız. Öncelikle olay tanımlarken hangi adımlardan geçeceğiz ondan bahsedelim.
1- Tanımlanacak olay ile koordineli çalışacak özellik tanımlanması
2- Tanımlanan özellik için get{} ve set{} bloklarının oluşturulması
3- Tanımlanacak olay tetiklendiğinde çalışacak fonksiyon için bir temsilci tanımlanması.
4- Temsilci ile birlikte çalışacak olay tanımlanması
5- Olay tetiklendiğinde çalışacak fonksiyonun tanımlanması
6- Fonksiyon ile tanımlanan olay arasında bağ kurulması
Şimdi adım adım işlemlerimize başlayalım.
1.Adım : Bildiğiniz gibi bir özellik tanımlanırken öncelikle özellik tarafından class içinde kullanılacak bir değişken tanımlanır. Bu değişken genellikle private olarak tanımlanır. Fakat dilerseniz diğer erişim belirleyicilerini de kullanabilirsiniz. Burada başlık bilgisinin değiştiği zaman tanımlayacağımız olayın çalışmasını istediğimiz için var olan "baslik" değişkenini ve "Baslik" özelliğini kullanabiliriz. baslik değiskeni şu şekilde tanımlanmıştı.
private string baslik = "İşleminiz devam ediyor. \r\nLütfen Bekleyiniz";2.Adım : Bu adımda class dışından erişim için özellik tanımlaması yapıyoruz. Yine var olan Baslik özelliği işimizi görecektir. Baslik özelliği şu şekilde tanımlanmıştı.
public string Baslik
{
get { return baslik; }
set {
if (value.Trim() != "")
{
baslik = value;
}
Ayarlar();
}
}
3.Adım : Bu adımda olayımız için bir temsilci tanımlıyoruz. Bu tanımlama sırasında olayın içermesini istediğimiz parametre tanımlamasını da yapıyoruz.
public delegate void customevent();
Şu durumda parametreye ihtiyacımız yok ama dilerseniz adettendir deyip parametre ekleyebilirsiniz. temsilcimizin public olarak tanımlandığına dikkat edin. Eğer "internal" olarak tanımlasaydık programcılar olayı kullanamayacaktı bu durumda işe yaramayan bir olay tanımlamış olacaktık.
4.Adım : Sıra geldi olay tanımlamasının yapılmasına. Bu tanımlama sırasında dikkat etmemiz gereken iki nokta var. Birincisi temsilci ile olay tanımlaması yapılırken temsilcinin erişim düzeyi olayın erişim düzeyini kapsıyor olması gereklidir. Yani ya ikisi de aynı erişim düzeyinde(public veya internal). veya temsilci daha üst düzeyde olması gerekiyor. Olayı internal olarak tanımlarsak farklı namespace içinden olaya erişim olmayacağı için amacımızın dışına çıkmış olacağız o yüzden her ikisini de public olarak tanımlıyoruz. Dikkat etmemiz gereken ikinci nokta ise olayımıza vereceğimiz için kullanıcıların göreceği isimdir. Seçtiğimiz ismin anlaşılır olmasına özen göstermeliyiz.
public event customevent BaslikDegistiginde;5.Adım : Bu adımda tanımladığımız olay tetiklendiğinde çalışacak fonksiyonu tanımlıyoruz. Kullanıcıların olayın tetiklenmesi gerekmediği durumlarda fonksiyonun adını kullanarak çağırmalarını istemiyoruz. Programlar açıcından sonucu belli olmayan şeyler oluşabilir. O yüzden fonksiyonumuzu private olarak tanımlıyoruz. Fonksiyonumuz şöyle bişey olacak
private void BaslikDegisim()
{
if (Baslik == "Olcay") MessageBox.Show("Hoşgeldin Olcay, sen başlığı istediğin gibi değiştirebilirsin");
}6.Adım : Şimdi herşeyi tanımladığımıza göre parçaları birleştirme zamanı geldi. Öncelike fonksiyonumuzla olayımız arasında bağ kuruyoruz. Bunu Yapıcı (Contructor) metot içinde yapıyoruz ki bileşen ilk oluşturulduğu andan itibaren çalışsın.
public Progress()
{
InitializeComponent();
BaslikDegistiginde += new customevent(BaslikDegisim);
Ayarlar();
} Son olarak özellik ile fonksiyonumuz arasında bir bağ kuruyoruz. Bunu da Baslik özelliğinin set{} bloğu içinde yapıyoruz. bu sayede Baslik özelliğine yapılan her atama işlemi sonucundan tanımladığımız olay tetiklenecektir. Tanımladığımız Baslik özelliğinin son hali şu şekilde
public string Baslik
{
get { return baslik; }
set
{
if (value.Trim() != "")
{ baslik = value; }
Ayarlar();
BaslikDegistiginde.Invoke();
}
} Kodlarımızı derliyoruz ve gördüğünüz gibi sorunsuz çalışıyor. Olayın tetiklenmesini görmeniz açısından MessageBox kullandım ama siz kodları kendi istediğiniz gibi değiştirebilirsiniz.
Tüm bunlara ek olarak aynı özelliklerde olduğu gibi olaylara da açıklama satırı eklenebilir. Olayımızı tanımladığımız satırda
[Description("Baslik metni değiştiğinde tetiklenir")]
public event customevent BaslikDegistiginde;
şeklinde bir düzenlemeyle tasarım alanında olayımız için bir açıklama belirtebiliriz.

Hiç yorum yok:
Yorum Gönder