Önce tasarladığımız arayüzü hatırlayalım.

Arayüze eklediğimiz her nesnenin kendine göre "olayları" bulunmaktadır. Örneğin bir düğmeyi ele alalım. Bir düğme nesnesi, kullanıcı fareyi düğmenin üzerine getirdiğinde, düğmenin üzerinden çektiğinde, düğmeye fare ile basılı tuttuğunda, parmağını farenin düğmesi üzerinden kaldırdığında veya klavyeden "Tab" düğmesine basarak düğmeyi seçtiğinde bizi uyarabilecek "olaylara" sahiptir. Bir nesnenin yazılıma gönderebileceği tüm "sinyalleri" görmek için, nesne seçiliyken özellikler panelindeki olaylar sekmesine geçmek yeterlidir.

Yukarıdaki resimde bir düğmeye ait olan olaylar görünmektedir. Dikkat ederseniz olayların isimlerinin yanlarındaki boş kutularda hiçbir şey yazmıyor. Çünkü bir olayın sinyal gönderdiği bir fonksiyon olmadığı durumda yazılım hiçbir tepki vermez.
Örnek olarak yazılımınızı çalıştırdıktan sonra arayüze yerleştirdiğiniz düğmelere tıklayabilirsiniz. Biliyoruz ki düğmelere tıkladığınız zaman hiçbir şey olmayacak. Çünkü henüz bir düğmeye tıklandığı zaman ne olacağını yazılıma bildirmedik. Öyleyse hangi olay sinyaline fonksiyon atamak istiyorsak, yazacağımız fonksiyon ile olay sinyalini bağdaştırmalıyız.
Şu durumda "Click" olayını bir fonksiyon ile bağdaştırmamız gerekiyor. Visual Studio bu işi bizim için yapmakta. Düğmeyi seçtikten sonra, "Click" olayının yanındaki kutucuğa çift tıklayarak, düğmeye tıklandığı anda çağırılacak olan fonksiyonun oluşturulmasını sağlayabilirsiniz. "Çıkış" düğmesini seçerek "Click" olayına çift tıklayalım.

Örnek resimde, 7 numaralı düğmeye (Çıkış düğmesi) basıldığı anda çağırılacak fonksiyonu oluşturmuş durumdayız.
Şimdi oluşturmuş olduğumuz bu fonksiyonu biraz inceleyelim. Fonksiyon başlığını kelime gruplarına ayırarak incelemekte fayda görüyorum. Öyleyse başlayalım:
* private: "Private" deyimi, fonksiyonun sadece oluşturduğumuz arayüz içinden erişilebilir olacağını anlatmaktadır. Eğer "Toplama Oyunu" arayüzünün dışında, yazılımımızda başka arayüzler de tasarlamış olsaydık, bu arayüzler "Toplama Oyunu" arayüzündeki bu fonksiyona erişemezdi. Diğer aitlik deyimlerine de yeri geldikçe değineceğiz.
* void: Bu deyim, fonksiyonun döndüreceği değişkeni nitelemektedir. Bir fonksiyondan hiçbir değişken dönmesini beklemiyorsak fonksiyonun döndüreceği değişkenin yerine "void" yazılır. Peki bir fonksiyondan ne zaman bir değişken döndürmesini bekleriz? Örneğin kendisine birden çok sayı gönderdiğimiz bir fonksiyondan sayıları toplamasını ve sonucu bize döndürmesini bekleyebiliriz. Böyle bir durumda fonksiyondan dönecek değer olarak "void" yerine "int" veya duruma göre "double/float" değerlerinden birini yazarız.
* button7_Click: Bu değer fonksiyonun adıdır. Visual Studio bu fonksiyonu bizim için oluşturmuş durumda. Fonksiyonun adını da, fonksiyonun "7 numaralı düğmeye basıldığında çağırılacak fonksiyon" olduğunu belirtir şekilde belirlemiş. Kendi yazdığımız fonksiyonlarda istediğimiz isimlendirmeyi kullanabiliriz.
* (object sender, EventArgs e): Parantez içindeki bu kelime grupları fonksiyona gönderilecek değişkenleri belirtmektedir. Bu durumda fonksiyona sistemden gelen, farenin düğme üzerine tıklandığına dair bilgileri içeren değişkenler gönderilmektedir. Fonksiyonların değişkenlerini belirlemeyi birazdan kendi fonksiyonlarımızı yazarken öğreneceğiz.
* {...}: Önemli konulardan biri süslü parantezlerin kullanımı. Süslü parantezler, fonksiyon tanımlarından hemen sonra açılır ve fonksiyonun son satırında kapanır. Böylelikle fonksiyonun sınırlarını çizmiş olurlar.
Süslü parantezler içinde tanımladığımız her değişken, süslü parantez kapandığı anda bilgisayarın geçici hafızasından (RAM) silinir.
Süslü parantezler fonksiyon tanımlarına özgü değildir. Şimdilik, iki süslü parantez içinde tanımlanmış bir değişkenin o iki süslü parantez arasında geçerli olduğunu bilmemiz yeterlidir.
Evet, artık bir fonksiyon tanımındaki metinlerin ne anlamlara geldiğini biliyoruz. Şimdi iki süslü parantez arasını dolduralım ve fonksiyonumuz hazır olsun.
Bu düğmeye basıldığı anda yazılımın kapanmasını istiyoruz. Ancak yazılımlar arasında bir gelenek olduğu üzere, kullanıcımıza bir de "gerçekten oyundan çıkmak isteyip istemediğini" soralım ki, adet yerini bulsun.

Şimdi yazdığımız fonksiyonu inceleyelim. Öncelikle bir "if" cümlesi göze çarpıyor. "If" kelimesi İngilizce'de "Eğer" anlamına geliyor bildiğiniz üzere. Dolayısıyla bu if cümlesine bağlı bir koşul var. Bu koşul sağlanırsa, "if" cümlesine ait olan süslü parantezlerin arasında kalan kod çalıştırılacak. Eğer koşul sağlanmazsa, "if" cümlesine ait parantezler arasındaki kod çalıştırılmayacak, varsa diğer kodlar çalıştırılmaya devam edecek (Örneğimizde yok.).
"If" cümlelerine oyunumuz ile alakası olmayan bir örnek satır yazalım ve sonra resimdeki kodun anlatımına dönelim:

Yukarıdaki satırları yazılımınıza aktarmak zorunda değilsiniz. Üzerinde konuşacağız sadece.
"ilkSayi" ve "ikinciSayi" adında 2 adet değişkenimiz var. Gördüğünüz gibi, bu değişkenlere tanımlandıkları anda değer atamış durumdayız. Birini 4'e, diğerini de 5'e eşitledik. İlk yazılarımızdan, tanımlamış olduğumuz bu değişkenlerin birer tamsayı değişkeni olduğunu hatırlıyoruz değil mi?
Şimdi gelelim "if" cümlesine. "If" deyiminden sonra açılan parantezler içine koşul yazılır. Bizim koşulumuz ilkSayi ve İkinciSayi değişkenlerinin birbirine eşit olması. Eşitlik koşulunu aradığımızı, "=" işaretinden yanyana 2 adet yazarak yazılıma bildiriyoruz.
Koşulu yazdıktan hemen sonra, koşulun sağlanması durumunda çalıştırılacak kodlara geçiyoruz. Burada hemen iki süslü parantez ile "if" cümlesinin sınırlarını çiziyor ve yazmış olabileceğimiz diğer kodlardan, "if" cümlesine ait olan kodları ayırıyoruz.
İki süslü parantez arasına baktığımızda, koşulun sağlanması durumunda "ilkSayi" değişkenine 4 değerinin ekleneceğini görüyoruz. Yani koşun sağlanırsa "ilkSayi" değişkenimiz 8'e eşit olacaktır.
Peki koşul sağlanıyor mu:) Sağlanmadığını çoktan farkettiniz. 4 ve 5 sayıları birbirine eşit sayılar değil. Dolayısıyla değişkenlerin taşıdıkları değerler birbirine eşit değil. Öyleyse "if" cümlesine ait süslü parantezler arasındaki kod şu durumda hiçbir zaman çalıştırılmayacak demektir.
Şimdi "Çıkış" düğmesi için hazırlamış olduğumuz fonksiyona dönelim. Bu fonksiyonda aşağıdaki metni görüyoruz:
if (MessageBox.Show("Oyundan çıkmak istediğinize emin misiniz?", "Toplama Oyunu", MessageBoxButtons.YesNo) == DialogResult.Yes)
"if" cümlesi ile, kullanıcıdan işlem için onay istemekteyiz. Eğer kullanıcı onay verirse yazılım kapatılacak, onay vermezse, "if" cümlesine ait süslü parantezler içindeki kapatma kodu çalıştırılmayacak ve yazılım kapatılmayacak.
Peki "if" cümlemiz içinde, .Net FrameWork üzerinden bir fonksiyon çağırdığımızı farkettiniz mi? Daha yakından bakalım.
MessageBox (Sınıf, sınıf nedir konusuna daha sonra geleceğiz.)
Show (Sınıf içindeki bir fonksiyon)
(Fonksiyona verilecek ilk değişken, fonksiyona verilecek ikinci değişken, üçüncü değişken)
== (fonksiyondan bir değer dönecek. Dönen değerin bir başka değere eşit olmasını istiyoruz.)
DialogResult.Yes (Dönen değerin eşit olmasını istediğimiz değer.)
Yani kullanıcının, karşısına çıkacak olan ileti kutusunda "Evet" düğmesine basması durumunda kapatma kodunu çalıştıracağız.
Klavyeden F5 düğmesine basarak yazılımı çalıştırın. Yazılımda "Çıkış" düğmesine basın. Aşağıdaki resimde görülene benzer bir ileti kutusuyla karşılaşacaksınız.

Eğer "Evet" düğmesine basarsanız kapatma kodu çalışacak, basmazsanız yazılım bu satırı atlayacak ve fonksiyondan hiçbir işlem yapmadan çıkacak.
Hiç yorum yok:
Yorum Gönder