FORMLARA UYGULANAN OLAYLAR

Mous'un tıklatılması, hareket ettirilmesi, formun boyutlarının değiştirilmesi, Enter'e basılması gibi işlemlerin her biri bildiğiniz gibi birer olaydır. Her nesne için mutlaka tanımlı birkaç olay mevcuttur. Bu bölümde daha önce hazırlanan veya çalışma sırasında özelliklerinde değişiklik yapılan bir forma uygulanabilecek olaylar hakkında bilgi verilecektir.

Visual Basic tarafından otomatik olarak tanımlanan olayların adlarını görmek için formun kod penceresi açılır. Kod penceresinde iki tane liste kutusu mevcuttur. Object liste kutusunda projede kullanılan nesneler, Procedure liste kutusunda ise bu nesnelere uygulanabilecek olaylar (Events) listelenir. Konumuz formlar için önceden tanımlı olaylar olduğu için Object liste kutusundan Şekil 12.1'de görüldüğü gibi form nesnesini seçeceğim.

Şekil 12.1: Object liste kutusundan Form seçme

Object liste kutusunda form seçili durumda iken kod penceresindeki Proc liste kutusunda formlar için önceden tanımlı olan olaylar aşağıdaki (Şekil 12.2) gibi listelenir.

Şekil 12.2: Formlar için tanımlı olayların listesi

Proc listesinden istenilen olay seçilerek enter basılırsa, Visual Basic tarafından otomatik olarak seçilen olaya ait bir yordam oluşturulur. Örneğin, Object liste kutusunda form nesnesi seçili iken proc liste kutusundan Click olayını seçersem Şekil 12.3'deki ekran görüntüsünü alırım.

Şekil 12.3: Form_Click yordamı

Gördüğünüz gibi Form_Click() adında bir yordam oluşturulmuştur. Bu yordamlar içerisine yaptırılmak istenen işlemlere göre program satırları yazılır. Şimdi bu olayların hangi durumlarda aktif hale geçtikleri üzerinde duralım.

12.1. Form-Load() yordamı :

Bir formun belleğe yüklenmesi veya Load edilmesi bir olaydır. Buna göre formun yüklenmesi sırasında işletilmesini istediğiniz program satırlarını Şekil 12.4'deki gibi Form_Load() yordamına yazmanız gerekir. Daha önceki bölümlerde kayıt girişi amacıyla hazırladığımız Giriş adlı projede formun yüklenmesi ile birlikte kayıt yazılacak dosyayı açıyorduk ve dosyadaki kayıt sayısını buluyorduk.

Şekil 12.4: Programın yüklenmesi ile işletilecek program satırları

12.2. Form_Click() ve Form_DblClick() yordamı :

Çalışma sırasında formun herhangi bir yerinde mouse ile tıklama yapılırsa yani Click olayı meydana gelirse Form_Click yordamında bulunan program satırları işletilir. Benzer şekilde çalışma anında formun üzerinde çift tıklama yapıldığı zaman DblClick olayı meydana gelir ve Form_DblClick() yordamı çalıştırılır. Örnek olması için Şekil 12.5'deki program satırlarını yazdım.

Şekil 12.5: Örnek program

Buna göre program çalıştırılıp form üzerinde tıklanırsa ve daha sonra çift tıklanırsa Şekil 12.6'daki ekran görüntüsü alınır.

Şekil 12.6: Programın çalıştırıldıktan sonraki ekran görüntüsü

12.3. Form_Activate() ve Form_Deactivate() yordamı :

Windows ortamında açık durumda olan ve o an için ekranda görünen bir pencereden diğerine geçmek için geçeceğiniz pencere üzerinde tıklama yapmanın yeterli olduğunu biliyorsunuz. Bu olay Windows'un sunduğu bir imkandır. Benzer durum Visual Basic projeleri dahilinde çalışan formlar için de geçerlidir. Ekranda aynı anda birden fazla form varken, açık durumda olan bir formdan diğerine geçmek için formun herhangi bir yerinde tıklama yapmanız yeterli olacaktır. Buna göre form yüklendikten sonra aktif hale gelir. Bir anda iki form aktif (Activate) olamayacağına göre diğer form da pasif (Deactivate) halde olur. Form aktif durumda iken yapılması gereken işlemlere uygun program satırlarını Form_Activate() yordamına yazmalısınız. Form pasif duruma geçtiğinde yapılması gereken işlemlere uygun program satırlarını da Form_Decativate() yordamına yazmalısınız. Örnek olması için hazırlayacağım projede iki tane form kullanacağım. Programı çalıştırdığımda formlardan hangisi aktif ise o form üzerinde 'Aktif Form', pasif durumda olan formun üzerinde ise 'Pasif Form' yazmasını istiyorum. Bunun için Form2'e ait kod penceresine Şekil 12.7'deki program satırlarını yazdım.

Şekil 12.7: Form2'ye ait kod penceresi

Form1'e ait kod penceresini ise Şekil 12.8'deki gibi düzenledim.

Şekil 12.8: Form1'e ait kod penceresi

Bu işlemlerden sonra programı çalıştırdığımda elde ettiğim ekran görüntüsü aşağıdaki (Şekil 12.9) gibiydi.

Şekil 12.9: Programın çalışması sırasındaki ekran görüntüsü

Çalışma sırasında sağdaki pencere üzerinde mouse ile tıkladığımda yani Form2 penceresini aktif duruma getirdiğimde Şekil 12.10'daki ekran görüntüsü elde ettim.

Şekil 12.10: Form2 aktif hale getirildikten sonraki ekran görüntüsü

Kısaca özetlersek, pencereler arasında geçiş yaparken üzerinde tıklanan pencere veya form aktif duruma geçer, bu sırada formda Activate olayı gerçekleşir. Pencere aktif duruma geçince Form_Activate() yordamı altındaki program satırları işletilir. Benzer şekilde pasif duruma getirilen formda ise Deactivate olayı gerçekleşir ve Form_Deactivate() yordamı altındaki program satırları işletilir.

12.4. Form_Unload() yordamı :

Tek forma sahip Visual Basic projesi çalıştırılır çalıştırılmaz projenin tek formu belleğe yüklenip aktif duruma getirilir. Bu sırada formla ilgili olarak hem Load hem de Activate olayları meydana gelir. Benzer şekilde projenin çalışması sona erdirilirken form bellekten silinir. Bu sırada ise Unload olayı meydana gelir ve Form_Unload() yordamına yazılan program satırları işletilir.

Şimdi Unload olayından yararlanarak, çalışan bir programdan çıkılmak istendiğinde, Şekil 12.11'deki gibi ekrana gelen ÇIKIŞ diyalog kutusu ile kullanıcının programdan çıkmak istediğinden emin olup olmadığını soralım.

Şekil 12.11: Çıkış diyalog kutusu

Bunun için yazılması gereken program satırları Şekil 12.12'deki gibi Form_Unload() yordamına yazılmalıdır.

Şekil 12.12

MsgBox() fonksiyonu tarafından ekrana getirilen diyalog kutusunda kullanıcı Tamam düğmesini tıklarsa MsgBox() fonksiyonu geriye 1 değerini, İptal düğmesini seçerse 2 değerini döndürür. CANSEL değişkeninin değeri -1 olursa Unload olayı iptal edilir. Buna göre İptal düğmesi tıklanırsa CANSEL değişkenine -1 değeri aktarılarak çıkma işleminden vazgeçilir.

12.5. Form_Resize() yordamı :

Formların boyutlarında değişiklik yapılması Resize olayını meydana getirir. Form boyutlarındaki değişime bağlı olarak gerçekleştirilmek istenen işlemler Form_Resize() yordamına yazılır. Şekil 12.13'deki örnek projede formun genişliği ve yüksekliği ekranda görülmektedir ve formun boyutlarındaki her değişim ekrana yansımaktadır.

 

 

 

 

 

 

 

 

 

Şekil 12.13

Projeyi çalıştırdığımda aşağıdaki (Şekil 12.14) ekran görüntüsünü aldım.

Şekil 12.14: Program çalıştırıldıktan sonraki ekran görüntüsü

Formun boyutlarını değiştirdikten sonra elde ettiğim ekran görüntüsü ise Şekil 12.15'teki gibiydi.

Şekil 12.15: Form boyutlarında değişiklik yaptıktan sonra

Gördüğünüz gibi formun boyutlarını değiştirdiğimizde Resize olayı gerçekleşmektedir ve Form_Resize() yordamı içindeki program satırları işletilmektedir.

12.6. Form_KeyPress() yordamı :

Çalışma sırasında klavyenin yön ve kontrol tuşları dışında herhangi bir tuşa basılması durumunda KeyPress olayı meydana gelir. KeyPress olayı için Visual Basic tarafından hazırlanan yordama basılan tuşun Ascii kodu parametre olarak gönderilir.

KeyPress olayı için basit bir örnek verelim. Bu örneğimizde, çalışma sırasında basılan tuşun hangisi olduğunu ekrana yazan Şekil 12.16'daki program satırlarını yazalım.

Şekil 12.16

Programı çalıştırıp basılan tuşların hangileri olduğu Şekil 12.17'deki gibi forma bakılarak öğrenilebilir.

Şekil 12.17

12.7. Form_KeyDown() ve Form_KeyUp() yordamı :

KeyDown ve KeyUp olayları işlev bakımından KeyPress olayına benzemektedirler. KeyDown olayı tuşa basıldığı zaman, KeyUp olayı ise tuşun serbest bırakıldığı sırada meydana gelir. KeyPress olayında tuşa basma ve bırakma gibi bir ayırım yoktu. Bu iki olayı temsil eden yordamlar dışarıdan KeyCode ve Shift adında iki parametre almaktadır. KeyCode parametresine, basılan tuşun Ascii kodu aktarılır, Shift parametresine ise bu olay meydana geldiği zaman Shift, Alt ve Ctrl tuşlarının basılı durumda olup olmadığı konusunda bilgi aktarılır. Mesela KeyDown olayı sırasında Alt tuşu basılı durumda ise Shift değişkenine 4 değeri aktarılır. Shift parametresinin, tuşların basılı olma durumlarına göre aldığı değerler Tablo 12.1'de verilmiştir.

Shift parametresinin değeri

Tuşların Basılı olma durumları

0

Shift, Ctrl ve Alt tuşları basılı değil

1

Shift tuşu basılı

2

Ctrl tuşu basılı

3

Shift ve Ctrl tuşları basılı

4

Alt tuşu basılı

5

Shift ve Alt tuşları basılı

6

Ctrl ve Alt tuşları basılı

7

Shift, Ctrl ve Alt tuşları basılı

Tablo 12.1: Shift parametresinin aldığı değerler

12.8. Form_MouseDown() yordamı :

Bu olay, çalışma sırasında formun üzerinde iken mouse'nin herhangi bir tuşuna basılması ile meydana gelir. Form_MouseDown() yordamı, Button, Shift, X ve Y olmak üzere dışarıdan 4 tane parametre almaktadır.

Button parametresi : MouseDown olayı sırasında mouse'nin hangi tuşuna basıldığı konusunda bilgi verir. Sağ tuşa basılmış ise Button parametresine 1, sol tuşa basılmış ise 2 değerini aktarılır. Her iki tuşa da basılmış ise Button parametresi 3 değerini alır.

Shift parametresi : MouseDown olayı meydana geldiği zaman Shift, Ctrl ve Alt tuşlarının basılı durumda olup olmadıkları konusunda bilgi bulunur.

X ve Y parametresi: MouseDown olayı meydana geldiği sırada mouse işaretinin yeri konusunda bilgi bulunur. Örnek olarak Şekil 12.17'deki programı verebiliriz. Bu program, mouse tıklandığı zaman mouse'nin konumunu forma yazmaktadır.

Şekil 12.17

Programı çalıştırıp formun herhangi bir yerinde mouse ile tıklarsanız mouse'nin konumu Şekil 12.18'de görüldüğü gibi forma yazılır.

Şekil 12.18

12.9. Form_MouseUp() yordamı :

MouseUp olayı, kullanıcı farenin basılı durumda olan tuşundan parmağını kaldırdığı zaman meydana gelmektedir. Form_MouseDown() yordamında olduğu gibi MouseUp yordamı da dışarıdan 4 tane parametre almaktadır. Bu parametreler işlevi MouseDown olayına ait parametrelerle aynıdır.

12.10. Form_MouseMove() yordamı :

MouseMove olayı fare işaretinin form üzerindeki konumu değiştiği zaman meydana gelmektedir. Çalışma sırasında farenin yeri değiştirildikçe bu olay meydana gelir. Dışarıdan 4 tane parametre almaktadır. Bu parametreler MouseDown ve MouseUp olaylarındaki parametrelerle aynıdır. MouseMove olayına Şekil 12.19'daki örneği verebiliriz.

Şekil 12.19

DrawWidth ile çizgi kalınlığı 3 olarak seçildi. Pset komutu belirtilen X ve Y koordinatlarına nokta koyar. Programı çalıştırıp fareyi rasgele hareket ettirirsek Şekil 12.20'deki gibi bir görüntü elde ederiz.

Şekil 12.20

12.11. Form_Paint() yordamı :

Paint olayı, bir formun üzerine başka bir form geldiğinde ve formun boyutlarında değişiklik yapıldığında meydana gelir. Çalışma sırasında bir formun üzerine başka bir form geldiğinde formun altında kalan yazılar silinir. Üzeri başka bir pencere ile kapatılan bir pencerenin eski halini korumak için Paint olayından yararlanılır. Aşağıdaki örnekte Form1 ve Form2 adında iki form kullanacağım ve bu formlardan Form1 üzerine herhangi bir yazı yazacağım. Form2'nin üzerini ise boş bırakacağım. Form1'e ait kod penceresini Şekil 12.21'deki gibi düzenledim.

Şekil 12.21: Form1'e ait kod penceresi

Programı çalıştırdığımda Şekil 12.22'deki ekran görüntüsünü elde ettim.

Şekil 12.22: Programı çalıştırdıktan sonraki ekran görüntüsü

Form1 üzerinde mouse ile tıkladığımda ise Şekil 12.23'deki ekran görüntüsünü aldım.

Şekil 12.23: Form1 üzerine mouse ile tıkladıktan sonra

Yukarıdaki (Şekil 12.23) şekilde görüldüğü gibi Form1 üzerindeki yazının bir kısmı Form2 tarafından kapatılmış durumdadır. Normalde Form1 tekrar aktif duruma geçtiğinde "Alabay" yazısının silinmesi gerekir. Fakat Paint olayı, form boyutlarının değişmesi, bir form üzerine başka bir form gelmesi durumunda yazıyı güncelleyerek silinmesini engellemektedir. Bu durumda iken mouse ile Form1 üzerinde tekrar tıkladığımda Şekil 12.24'deki ekran görüntüsünü elde ettim. Görüldüğü gibi yazıda herhangi bir silinme ve bozulma yok.

 

Şekil 12.24: Form1 penceresini tekrar aktif hale getirdikten sonra

Gördüğünüz gibi Form2 altında kalmış olan "Alabay" yazısında, Form1 penceresi tekrar aktif hale geldiğinde herhangi bir değişiklik ve bozulma olmadı.