12.07.2015 Views

bu döküman kaan aslan tarafından c ve sistem ... - Kitabxana

bu döküman kaan aslan tarafından c ve sistem ... - Kitabxana

bu döküman kaan aslan tarafından c ve sistem ... - Kitabxana

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

edilmektedir.Kontrol sınıfının her mesaj için bir OnXXX sanal fonksiyonunun yanısıra <strong>bu</strong>na karşı gelen bir XXXE<strong>ve</strong>nt elemanı vardır. Örneğin OnClick fonksiyonuna karşılık gelene E<strong>ve</strong>nt elemanının ismi ClickOnKeyDown fonksiyonuna karşılık gelen E<strong>ve</strong>nt elemanının ismi KeyDown dur. İşte controlsınıfının OnXXX fonksiyonları XXX isimli e<strong>ve</strong>nt elemanının fonksiyonlarını çağırmaktadır.Böylece programcı bir mesaj için OnXXX isimili sanal fonksiyonunu O<strong>ve</strong>rride etmek yerine XXXelemanına fonksiyonda girebilir. Sık yapılan bir hata bir mesajın her iki yöntemle birden işlenmesisırasında oluşmaktadır. Programcının hem OnXXX isimli sanal fonksiyonunu O<strong>ve</strong>rride ettiğinihemde XXX E<strong>ve</strong>nt elemanına += operatörü ile fonksiyon girdiğini düşünelim. Bu durumda ilgilimesaj oluştuğunda OnXXX fonksiyonu çağrılacak fakat XXX E<strong>ve</strong>nt fonksiyonu çağrılmayacaktır.Çünkü XXX E<strong>ve</strong>nt fonksiyonlarını çağıran Control sınıfının OnXXX fonksiyonudur. Hal<strong>bu</strong>ki artıkO<strong>ve</strong>rride edilmiş fonksiyon çağrılmaktadır. Eğer programcı Control sınıfının OnXXX ninfonksiyonunu da çağırmak istiyorsa <strong>bu</strong>nu aşağıdaki gibi base.OnXXX yaparak sağlamalıdır.Kontrol sınıfının OnXXX sanal fonksiyonuna karşılık bir XXX e<strong>ve</strong>nt elamanı vardır. Bu E<strong>ve</strong>nteleleman YYY isimli bir delege türündendir. Programcının <strong>bu</strong> e<strong>ve</strong>nt elemana fonksiyonekleyebilmesi için ilgili delege türünden nesne yaratması gerekir. Ve çağrılacak e<strong>ve</strong>nt fonksiyonu odelegenin parametrik yapısına uygun olmak zorundadır. Örneğin MouseDown isimli E<strong>ve</strong>ntelemanının ilişkin olduğu delege sınıfı MouseE<strong>ve</strong>nt Handler isimli sınıftır. Bu delege sınıfı geridönüş değeri void olan 1. parametresi object 2. parametresi MouseE<strong>ve</strong>ntArgs türünden olanfonksiyonları tutabilir. Dolayısıyla programcının <strong>bu</strong> E<strong>ve</strong>nt elemana fonksiyon girerkenMouseE<strong>ve</strong>ntHandler türünden bir nesne yaratması <strong>ve</strong> gireceği fonksiyonu <strong>bu</strong>rada belirtmesi gerekir.Örneğin: (kırmızı bölüm)using System;using System.Windows.Forms;using System.Drawing;namespace CSD{class App{public static void Main(){Application.Run(new MyForm());}class MyForm : Form{public MyForm(){this.MouseDown += new MouseE<strong>ve</strong>ntHandler(MouseDownHandler);}public void MouseDownHandler(object sender, MouseE<strong>ve</strong>ntArgs mea){MessageBox.Show("Test");}//...}}}31

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!