Memik YANIK'ın Günlüğü

30/5/2009 - Zirveye Çıkaran Programcılık Teknikleri : 3

Kategori: Guncel Yazilar

Bu tekniğimizde Visual Basic çıktığından, yani önceleri RAD adı verilen görsel uygulama geliştirme araçları çıktığından bu yana programcıların sık yaptıkları işlemlerden birisi olan event ve kontrol oluşturmaktan söz edeceğiz. Tabi bazılarınız "ben yıllardır programcıyım ama en son ne zaman event oluşturdum hatırlamıyorum" diyenler olabilir ama biz size inanmıyoruz deyip eventların ve kontrollerin nasıl oluşturulduğunu bir güzel size anlatacağız.

 

Event ve Kontrol Oluşturmak – Zirveye Çıkmak İsteyenler İçin

 

Eventların nasıl oluşturulduğunu anlatmak için öncelikle şunu bilmeliyiz: C#’ta çalıştırılan kod bloklarına event denilmektedir. Bu konuda itiraz kabul edilmez. Madem amacınız zirveye çıkmaktır verdiğimiz her tekniği olduğu gibi kabul etmelisiniz, başka kaynaklarda yazılanlarla ilgilenmemelisiniz. Bu konuda yazdıklarımın anlaşılması için basitten zora doğru işlemleri açıklayacağım. Bu amaçla kodla bir Button kontrolü oluşturacağım.

 

private void button1_Click(object sender, EventArgs e)

 {

    Button miss_gibi_button = new Button(); // kontrol oluşturuldu

    Controls.Add(miss_gibi_button);

    miss_gibi_button.Text = "Miss Buton";

 }

 

Gördüğünüz gibi C#’ta kontrol oluşturmak böyle teknik bir işlemdir. Zirveye çıkmak isteyenlerin kontrol oluşturma işlemini her seferinde Microsoft’un programcıları tarafından tarif edilen şekilde yapılmasını engellemeleri gerekir. Madem bu şekilde kontrol oluşturduk bir de event oluşturalım. Böylece kontrolümüz eventsız kalmaz. Bu düşünce ile yukarıda button oluşturduğum koda yeni satırlar ekledim ve event oluşturdum.

 

private void button1_Click(object sender, EventArgs e)

  {

    Button miss_gibi_button = new Button(); // Kontrol oluşturuldu

    miss_gibi_button.Text = "Miss Buton";

    this.Controls.Add(miss_gibi_button);

    miss_gibi_button.Click += new EventHandler(tikla_gozum); 

  }

 

private void tikla_gozum(System.Object sender, EventArgs  e) // event oluşturuldu

  {

     MessageBox.Show("Ne güzel tıkladın"); 

  }

 

Hazırladığım eventa akılda kalıcı bir isim verdim. Gördüğünüz gibi kontrol oluşturmak ve event yaratmak son derece teknik bir konu olsa bile bizimle kolaydır. Şimdi ise aynı anlayışla bir de TextBox kontrolü oluşturup bu kontrol için bir Event yaratalım.

 

private void button1_Click_1(object sender, EventArgs e)

 {

    TextBox acer_text = new TextBox();

    this.Controls.Add(acer_text);

    acer_text.TextChanged += new EventHandler(kardes_bilgi_girdin); 

  }

 

private void kardes_bilgi_girdin(System.Object sender, EventArgs  e)

 {

    MessageBox.Show("Bir harf girdin, eline sağlık"); 

 }

 

İşin özü şudur:Her kim Event ve kontrol hazırlama konusunda yukarıda söylenenlerden farklı bir şey söylerse onun programcılık konusundaki yeri kesin çukurdur, çukurda kalmaya mahkumdur. Biz hayatımızı C#'a verdik. Nasıl ki Türkiye'de C# bizden soruluyor, bizden öğreniliyor; kontrol ve eventlar yukarıda anlatıldığı şekilde hazırlanır.

 

Event ve Kontrol Oluşturmamak – Çukura İnmek İsteyenler İçin

 

Button ve TextBox gibi sınıfların Event’ları zaten olduğu için tekrar oluşturulmaları mümkün değildir. Tabi bazılarınız .NET Framework ile gelen Button ve TextBox gibi sınıfların orijinal hallerini beğenmeyip bu sınıflardan yola çıkıp kendi özel sınıflarını(Toolbox’ta birer düğme ile temsil edilen sınıflara kontrol deme alışkanlığı vardır) oluştururken bu sınıflar için yeni event’lar oluşturabilirler. Yoksa Button ve TextBox gibi sınıflar için yukarıda anlatılan şekilde Event oluşturmak mümkün değildir. Tabi sihirbazlık becerisi olanlar belki bunu başarabilirler.

 

Zirveye çıkanların affına sığınıp kontrol oluşturmanın bir bakıma yeni bir sınıf hazırlamak olduğunu işaret edelim. Yani ne zaman ki .NET Framework ile gelen kontroller işinizi görmez o zaman yeni kontroller oluşturmak gerekir ki bu son derece teknik bir işlemdir. Yani durup dururken 3 satır kodla kontrol oluşturmanın hem bir mantığı yoktur hem de mümkün değildir.

 

Madem kontrol oluşturamıyoruz bari bir button nesnesi oluşturalım. Visual Studio’nun Toolbox penceresinden Button kontrolünü temsil eden düğmeyi sürükleyip mevcut bir formun üzerine bırakırsanız "button1" adında bir Button nesnesi hazırlamış olursunuz. Bu sırada forma ikinci bir button nesnesi yerleştirmeniz halinde Visual Studio bu button nesnesine button2 adını verir.



Başka bir deyişle Toolbox’tan Button kontrolünü temsil eden düğmeyi sürükleyip forma bırakmakla Visual Studio’ya demiş oluyoruz ki “bana standart özelliklere sahip bir button nesnesi hazırla”. Visual Studio bizi kırmayıp bu nesneyi oluşturmaktadır. Tekrar edelim: Toolbox'tan yararlanıp forma yani Form sınıfının mirasçısı sınıfta button1 adında bir button1 nesne hazırlamak demek bir bakıma Visual Studio'ya bu işlem için gereken kodları git benim için Form1.Designer.cs dosyasına yaz demektir. İşte forma button1 adında button nesnesi yerleştirdiğinizde geri planda hazırlanan kodlar.



Bu sırada yani formun üzerinde button1 adındaki bir Button nesnesi varken bu nesneyi çift tıklarsanız Visual Studio sizin bu nesnenin Click olayını temsil eden bir metot hazırlamak istediğinizi varsayar. Aşağıda verdiğim kodu tasarım anında button1 adlı button nesnesini(kontrol değil nesne) çift tıkladıktan sonra aldım.

 

private void button1_Click(object sender, EventArgs e)

  {

  }

 

Gördüğünüz gibi bu bir event değil bir metottur. Visual Studio bu metoda ad seçerken nesne ile bu metodun temsil edeceği olayın adını birleştirip bir metot adı meydana getirdi. Yani programcı bu metoda istediği adı verebilir. Örneğin programcı bu metodun adını aşağıdaki gibi değiştirebilir.

 

private void button1_Tokmakci(object sender, EventArgs e)

  {

  }

 

Anlatılan şekilde button1 nesnesi tasarım anında çift tıklandığında Visual Studio metot hazırlamaktan öte ayrıca bu metot ile Button nesnesinin Click olayını ilişkilendirir. Bu ilişkilendirme Designer.cs adlı dosyada yapılır. Tasarım anında button1 adlı nesneyi çift tıkladığım için Visual Studio geri planda Form1.Designer.cs dosyasına aşağıda işaret edilen satır gibi bir satır ekleyerek bu metotla button1 nesnesinin Click olayını ilişkilendirdi.




Varsayalım ki Visual Studio'nun button1_Click() adını verdiği metodun adını beğenmediğiniz veya bu metot adı yerli programcılık kitabı yazarları tarafından daha önceden register edilmiş olduğundan kullanmak istemiyor olabilirsiniz. Bu durumda Form1.cs dosyasına gidip metodun adını istediğiniz gibi  değiştirebilirsiniz. Tabi sonradan kendiniz metodunun adını değiştirirseniz Form1.Designer.cs dosyasındaki metotla Click olayı arasında ilişki kuran satırı da aşağıdaki gibi değiştirmeniz gerekir.

Yukarıda zirveye çıkmak isteyenler için yazılan metinde kod yazılarak yani Visual Studio’dan yararlanılmadan bir kontrol hazırlanmıştı. Pardon nesne hazırlanmıştı. Şimdi aynı işlemi iflah olmaz çukurcular yani zirveye çıkmak istemeyenler için yapalım.

 

private void Form1_Load(object sender, EventArgs e)Button button2 = new Button();

  {

     button2.Text = "buton2";

    button2.Left = 25;

    button2.Top = 50;

   this.Controls.Add(button2);

 }

 

Bu kodları Form1’in Load olayını temsil eden metoda yazdığım için proje çalıştırıldığında forma button2 adında bir nesne yerleştirilir. Çalışma anında button2 tıklansa bile herhangi bir tepki alınmaz. Çünkü bu nesnenin Click olayını temsil eden bir metot henüz yoktur.

 

Şimdi örnek olması için bir metot hazırlayacağım. Aşağıda verdiğim ekran görüntüsünde tespit edeceğiniz gibi hazırlayıp button2_Tokmakci() adını verdiğim metot object ve EventArgs tipinde 2 parametreye sahiptir. Hazırladığım metoda özellikle argo bir ad verdim ki yarın bir gün birileri çıkıp metodumuzun adını çalmışsın demesinler.


Bu metodun button2 adını verdiğim button nesnesinin Click olayını temsil etmesini istiyorum. Button nesnelerinin Click olayını ancak object ve EventArgs tipinde 2 parametreye sahip metotlar temsil edebildiği için metodun parametre yapısını ona göre düzenledim.

 

Şimdi sırada bu metot ile, kod yazarak hazırladığım button nesnesinin Click olayı arasında ilişki kurmak var. Bu amaçla yukarıda verdiğim koda ekleme yaptım. Gördüğünüz gibi ne kontrol hazırladık ne de Event. Bu nedenle zirveye çıkmayı kafalarına koyanlar metot hazırlama işleminden Event hazırlama diye söz ederlerse inanmayınız.

EkleBunu Sosyal Paylaşım Butonu
Yorum yaz!

<- Son SayfaSonraki Sayfa ->

Hakkımda

Bu blog'da bilgisayar ve programcılık üzerine yazdıklarımın arka planını bulacaksınız

Kategoriler

  • ASP.NET
  • CSharp
  • Delphi
  • Guncel Yazilar
  • Programcilik
  • Visual Basic
  • Arkadaşlarım

    sewimsizce