Form Nesnesi Form nesnesi, uygulamaların kullanıcı ara yüzünü oluşturulmasına zemin hazırlayan nesnedir. Form nesnesi MDI (Multiple Documents Interface) ve SDI (Single Document Interface) olmak üzere iki tipe sahiptir. Uygulamada SDI form kullanılıyorsa ve Şekil 1 de gösterildiği gibi birden fazla form yer alıyorsa, bir birlerinden bağımsızdırlar. MDI form ise Şekil 2 de gösterildiği gibi alt (Child) formları bir arada tutan bir ana formdur. Şekil 1. SDI Form Windows işletim sisteminde yer alan NOTEPAD programı, SDI tipte bir form yapısına sahiptir, yeni bir doküman açılmak istendiğinde açık olan doküman kapatılmalıdır. İstatistik Paketlerinden bir tanesi olan Minitab uygulaması ise bir MDI form yapısındadır. Uygulama çalıştırıldığında birden fazla doküman açılabilir ve üzerlerinde çalışılabilir. Şekil 2. MDI Form ve alt (Child) formlar
Form nesnesinin de sahip olduğu özellikler, metotlar ve olaylar vardır. Sahip olduğu bazı özellikler Height, Width, Name dir. Form nesnesinin tüm özellikleri Tablo 1 de verilmiştir. Sahip olduğu metotlara Hide, Show, Move örnek olarak verilebilir, form nesnesinin tüm metotları Tablo 2 da verilmiştir. Nesneye ait olaylardan bazıları ise Load, QueryUnLoad, UnLoad olaylarıdır. Nesneye ait tüm olaylar Tablo 3 de verilmiştir. Şekil 3. Notepad Uygulaması (SDI) Uygulama iki kez çalıştırılmıştır. Şekil 4. Minitab Uygulaması (MDI) Bir tane MDI Form ve Session, Worksheet 1 ve Project başlıklarına sahip üç tane alt (Child) form. Not: Bazı açıklamalarda, [ ] kullanılmıştır, örneğin; Private Sub nesne_activate() [Private Sub Form_Activate()] Kod bloğu Bu durumda, ilk verilen ifade özellik, metot veya olayın nesneler için genel kullanım şeklini, parantez içinde verilen ise bahsedilen nesne veya nesneler için kullanım şeklini ifade etmektedir. Örnekte Activate olayının bu olayı kullanabilen nesneler için genel kullanım şeklini, parantez içinde ise Activate olayının Form nesne için kullanım şeklini ifade eder. Form Özellikleri Form nesne özellikleri, nesnenin görünümü, konumu, rengi vb. özellikleri düzenler. Form özelliklerinin çoğu ya çalışma anında ya da tasarım anında Properties penceresi aracılığı ile düzenlenir. Bahsedilen özelliklerden bazıları diğer nesneler içinde geçerlidir. Tablo 1. Form nesnesinin özellikleri ActiveControl FillStyle Moveable Appearance Font Name AutoRedraw FontBold ScaleHeight BackColor FontItalic ScaleLeft
BorderStyle FontName ScaleMode Caption FontSize ScaleTop ClipControls FontStrikethru ScaleWidth Controls FontTransparent ShowInTaskBar CurrentX FontUnderline StartUpPosition CurrentY ForeColor Tag DrawMode HDC Top DrawStyle Height Visible DrawWidth HWnd Width Enabled KeyPreview WindowState FillColor Left Caption Form veya MDI Form nesnesinin başlık çubuğunda gösterilecek metni belirleyen özelliktir. Height Özelliği Height (yükseklik) özelliği nesnelerin yüksekliğini döndürür veya ayarlar. Bu özellik, Form nesnesinde, nesnenin en dış noktasından (formun kenarlıkları ve başlık çubuğu da dahil) ölçülür. Width Özelliği Width (genişlik) özelliği nesnelerin genişliğini döndürür veya ayarlar. Bu özellik, Form nesnesi için aynı Height özelliğinde olduğu gibidir. Name Özelliği Form nesnesinin, sadece tasarım anında değer alabilen bir özelliğidir. Uygulamanın tasarlanması aşamasında nesnelerin isimlendirilmesi için kullanılan, her birine özel olarak verilen, ayırt edici bir özelliktir. ScaleHeight ve ScaleWidth Özellikleri Bu iki özellik sırasıyla ilgili nesnenin kenarlıkları ve varsa başlık çubuğu katılmadan sadece boyutlandırılabilen iç kısmının yükseklik ve genişlik değerlerini döndürür veya ayarlar. Bu özellikler sadece Form, MDI Form ve Picturebox nesneleri için geçerlidir. Şekil 5. Height, Width, ScaleHeight ve ScaleWidth WindowState Özelliği Form nesnesinin bu özelliği, nesnenin o anki görünüm durumunu belirten değeri döndürür veya değeri kabul eder. Bu özellik aşağıdaki değerleri döndürür veya kabul eder:
Sabit Değer Tanım VbNormal 0 (Varsayılan) Normal VbMinimized 1 Minimize (simge durumuna küçültülmüş) VbMaximized 2 Maksimize (maksimum boyuta büyütülmüş) Örneğin Form1 nesnesinin görünümünün, bilgisayar ekranının tamamını kaplaması istendiğinde: Form1.WindowState = VbMaximized veya Form1.WindowState = 2 Form Nesnesi Metotları Form nesnesinin metotları form üzerinde belli işlemlerin yapılmasını sağlar. Örneğin, birden fazla form nesnesine sahip bir uygulamada, iki formun aktive edilmesi istendiğinde (odaklanma), ilgili nesnenin SetFocus metodundan yararlanılır. Bahsedilen metotlardan bazıları form nesnesi dışındaki nesneler içinde geçerlidir. Tablo 2. Form nesnesinin metotları Cls SetScale DrawCircle ScaleX DrawLine ScaleY Hide SetFocus Move Show Point TextHeight PointSet TextWidth Refresh ZOrder Hide Metodu Form nesnesinin gizlenmesini sağlayan metottur. Metot aracılığı ile görüntüden kaldırılan form nesnesinin kontrollerine kullanıcı erişim sağlanamaz. Nesnenin Visible özelliği ile aynı işlemi gerçekleştirir. Hide metodu form nesnesinin sadece gizlenmesini sağlar, ancak hafızadan silmez. Form1.Hide (Form1.Visible = False aynı işlemi gerçekleştirir.) SetFocus Metodu Form nesnesinin bu metodu, birden fazla form olması durumunda, istenilen bir tanesine odaklanılmasını sağlar. Form1.SetFocus Show Metodu Form nesnesinin gösterilmesini sağlar. Show metodunun genel kullanımı; Form1.Show (Form1.Visible = True aynı işlemi gerçekleştirir.) Show metodu Style eklemesi ile iki farklı şekilde uygulanabilir: vbmodal (1) ile kullanılırsa form nesnesi gösterildikten sonra uygulama içinde devam eden kodlar, modal olarak gösterilen form Hide metodu ile gizlenene veya UnLoad deyimi ile hafızadan silinene kadar
çalıştırılmaz ve vbmodeless (0) ile yüklendiğinde devam eden kodlar çalıştırılmaya devam eder. Form1.Show vbmodal Form1.Show 0 Modal Gösterme Modeless Gösterme Form Nesnesi Olayları Nesnelere ait olaylar, o nesneler üzerinde yapılan bazı hareketler sonucunda ortaya çıkan önceden tanımlı olaylardır, örneğin, fare butonlarından bir tanesini tıklamak, bir seçeneği seçmek veya bir nesne üzerinde işaretçinin gezdirilmesi gibi. Form nesnesine ait olaylarda mevcuttur. Bunlardan bazıları form nesnesinin aktive edilmesi (etkinleştirilmesi), form nesnesinin tıklanması veya form nesnesinin kapatılması gibi olaylardır. Tablo 3. Form nesnesinin olayları Activate LostFocus Click MouseDown DblClick MouseMove Deactivate MouseUp GotFocus Paint KeyDown QueryUnload KeyPress Resize KeyUp Terminate Load Activate Olayı Form nesnesinin etkinleştirme (Activate) olayı, nesnenin kullanıcı etkisiyle (tıklanması) veya Show veya SetFocus metotları aracılığı ile gerçekleşir. Bu olayın gerçekleşebilmesi için form nesnesi görünür (.Visible = True) olmalıdır. Bu olayın tersi ise etkinleştirmeme (Deactivate) olayıdır. Şekil 6 da Form2 etkin, Form1 ise etkin olmayan durumdadır. Genel yapısı; şeklindedir. Private Sub nesne_activate() [Private Sub Form_Activate()] Kod bloğu
Şekil 6. Active Deactive Olayı Click Olayı Form nesne üzerinde herhangi bir yere fare ile tıklandığında, Click olayı meydana gelir. Yapısı; şeklindedir. Private Sub nesne_click() [Private Sub Form_Click()] Kod bloğu Load Olayı Load olayı bir form hafızaya yüklendiğinde meydana gelir. Bu olay genellikle form yüklendiğinde, formun ilk kullanıma hazırlanması için gerekli kodlamaları içerir. Örneğin, liste kutularına (ListBox) öğelerin atanması veya formdaki metin kutularının (TextBox) içeriğinin temizlenmesi veya belli değerlerin göstermesinin sağlanması gibi. Kullanımı; Private Sub Form_Load() [Private Sub MDIForm_Load()] Kod bloğu KeyPress Olayı KeyPress olayı klavyeden bir tuşa basıldığında meydana gelen olaydır. Bu olay gerçekleştiğinde basılan tuşun ANSI kodunu (ASCII Karakter Kodu), KeyAscii değişkeni (veya başka bir değişken aracılığı ile) döndürür. Örneğin form nesnesi etkin iken ENTER tuşuna basıldığında, KeyPress olayı gerçekleşmiş olacaktır ve döndürülen ANSI değeri 13 olacaktır. Genel yapısı; Private Sub nesne_keypress(keyascii As Integer) [Private Sub Form_KeyPress(KeyAscii As Integer)] Kod bloğu
şeklindedir. QueryUnload Olayı Bu olay bir formun kapanmasından önce oluşan bir olaydır. Bir SDI Form da form kapanmasından önce, MDI formda ise önce ana form olan MDI form, daha sonra ise alt (Child) formlar için meydana gelir. Eğer kapanma olayından vazgeçilmezse, formlar kapanır. MDI formlarda ise önce alt formlar sonra alt formlar kapanır. Bu olay iki değişkene ihtiyaç duyar ve kapanma nedenini temsil eden bir değer döndürür. Kullanımı; Private Sub Form_QueryUnload(cancel As Integer, unloadmode as integer) [Private Sub MDIForm_QueryUnload(cancel As Integer, unloadmode as integer)] Kod bloğu şeklindedir. Tablo 4. QueryUnload olayının değişkenleri Değişken Açıklama Cancel Tam sayı değişkendir. Bu değişkene 0 dan farklı herhangi bir değer atandığında hafıza yüklü olan tüm formların QueryUnload olayını durdurur ve uygulamanın kapanmasını engeller. Unloadmode QueryUnload olayının nedenini gösteren değer veya sabittir. Tablo 5. UnloadMode değişkeninin aldığı sabit ve temsil değerleri Sabit Değer Açıklama vbformcontrolmenu 0 Kullanıcı, formdaki kontrol menüsünde yer alan Close (Pencere Kapat Butonu) komutunu seçti. vbformcode 1 Kod aracılığı ile UnLoad deyimi tetiklendi. vbappwindow 2 Aktif Windows işletim sistemi oturumu sona erdiriliyor. vbtaskmanager 3 Windows işletim sisteminin Task Manager ı (Görev Yöneticisi) uygulamayı kapatıyor. vbformmdiform 4 MDI formu kapatıldığı için MDI alt formu kapatılıyor. vbfornowner 5 Form sahibi kapatıldığı için form kapatılıyor. Load Deyimi Load deyimi form nesnesini hafızaya yükler. Kullanımı Load Form1 şeklindedir. Show metodundan farklı olarak, form özelliklerini ve üzerinde taşıdığı nesnelerin özelliklerini ilk değerlerine ayarlar. UnLoad Deyimi Unload deyimi form nesnesini hafızadan siler. Kullanımı; şeklindedir. UnLoad Form1
MDI (Multi Documents Interface) Formlar MDI arabirimi tek bir MDI form ve içinde yer alan çok sayıda alt formdan (Child) oluşur. Ana forma parent (ana) form denir. Ana form için çok sayıda alt form açılabilir. Bir bakıma MDI Form alt formların taşıyıcısı konumundadır. MDI form, yapısı gereği, bazı özel kontrol nesneleri haricinde, metin kutusu, buton gibi kontrol nesnelerini taşıyamaz. Bu nedenle de, veri girişi veya gösterimi gibi rutin işlemler için kullanılamazlar. Genellikle menü çubuğu aracılığı ile yönetilirler. Bir MDI form içinde yer alan alt formlar simgeleştirildiklerinde MDI form içinde, MDI form simgeleştirildiğinde ise işletim sisteminin kontrol öğesinde yer alır. Bir Visual Basic projesinde sadece tek bir MDI form yer alabilir. Ancak ana form için istenen sayıda alt form yer alabilir. MDI forma alt formların eklenmesi, projeye eklenen bir SDI formun MDIChild özelliğinin True olarak ayarlanması yoluyla olur. Şekil 7. MDI Form Tasarım Anı
Şekil 8. MDI Child Form Tasarım Anı Çalışma anında MDI özellikleri Bütün alt formlar MDI formun çalışma alanında kullanılır. Bu nedenle, alt formların hareketleri, MDI form alanı ile kısıtlıdır. Şekil 9. MDI Form ve Child Formları Bir alt form simgeleştirildiğinde MDI form içinde, MDI form simgeleştirildiğinde ise işletim sisteminin görev çubuğunda gösterilir. MDI formun simgeleşmesi veya tekrar açılması durumunda alt formlar eski durumlarında (simge ya da normal büyüklükte) gösterilirler.
Şekil 10. MDI Child Formlar simge durumunda Bir alt form ekranı kapladığında, Caption özelliğinin taşıdığı bilgi MDI formun Başlık kısmında gösterilir. Şekil 11. Form2 Child Form Maksimum boyutlandırılma AutoShowChildren özelliği ile alt formlar yüklendirildiklerinde otomatik olarak gösterilirler ya da gösterilmezler. Bu durum AutoShowChildren özelliği True veya False olarak ayarlanması ile gerçekleşir. Aktif alt form menü çubuğuna sahip ise, bu menü MDI formun menü çubuğu olarak gösterilir.
Şekil 12. Menü çubuğuna sahip Child Formlar Tasarım anı a) Form1 Child Aktif Çalışma anı b) Form2 Child Aktif Çalışma anı Şekil 13. Menu çubuğuna sahip child formlar Alt Formların Kullanımı Bir MDI uygulamanın tasarımında Child formların yönetimi önemlidir. Child formların yüklenmesi, kaldırılması ve bu formlar arasında geçiş en önemli işlemlerdendir. Bir Child form yüklendiği zaman, bağlı olduğu MDI form (ana formu) otomatik olarak yüklenir. Buna karşın bir MDI yüklendiğinde child formları otomatik olarak yüklenip gösterilmez. AutoShowChildren özelliği ile formların gizli olarak yüklenmesi sağlanır ancak formları göstermek için Show metodu kullanılır. Formların Büyüklüğü ve Konumu Bir MDI child form ilk açıldığındaki boyutu MDI ana formun büyüklüğüne göre değişir. Bir MDI child formun boyutları ve konumu değiştirilebilir. Bu işlem için BorderStyle özdelliği 2 Sizable olarak ayarlanmış olmalıdır.
Şekil 14. Child Form BorderStye özelliği MDI Form nesnesinin bazı özellik ve olayları ActiveForm Özelliği SDI form nesnesi kullanıldığında aktif pencere bilgisini, eğer MDI form nesnesi kullanılıyorsa aktif alt form (child) bilgisi döndürülür. MDIForm1.ActiveForm[.Name;.Text1.Text; ] WindowState Özelliği WindowState özelliği, SDI formlarda olduğu gibi çalışmaktadır. Menü Hazırlama Uygulamalarda MDI form ve Child formlar için ayrı ayrı menu çubukları yaratılabilir. MDI üzerinde komut düğmesi gibi kontroller kullanılmadığı için işlemler genellikle menü çubuğu aracılıyla yapılır. Aktifleşen bir alt form eğer bir menü çubuğuna sahipse o menü MDI formun çubuğu haline gelir. Böylece MDI form taşıyıcılık görevinin yanı sıra açılan alt formun işlemlerinin de yapılmasını sağlar. Her formun farklı işlemler içereceği düşünüldüğünde bu olanak programlar için çok yararlıdır. Window (Pencere) Menüsü Yaratmak MDI uygulamaların birçoğunda Window (Pencere) menüsü vardır. Window menüsü MDI formlar arasında geçiş yapmaktır. Bunun yanı sıra bir MDI uygulamada bulunan Tile (Döşe) ve Cascade (Basamakla) işlemleri vardır. Visual Basic te Window menüsü yaratmak için menü editorü ve pencere işlemleri içinde belli metotlar kullanılır.
Arrange Metodu MDI form içindeki formları (pencereleri) ve simgeleri düzenler. Nesne.Arrange pencere_düzenleme Nesne bilgisi MDI formu gösterir. Düzenleme bilgisi pencerelerin nasıl düzenleneceğini gösterir. Düzenleme seçenekleri Sabit Değer Açıklama vbcascade 0 Simge durumunda olmayan bütün Child pencereleri basamaklı biçimde vbtilehorizontal 1 Simge durumunda olmayan bütün Child pencereleri yatay olara döşer. vbtilevertical 2 Simge durumunda olmayan bütün Child pencereleri dikey olara döşer. vbarrangelcons 3 Simge durumundaki formları döşer. a) Pencere Menüsü Basamaklama b) Pencere Menüsü Yatay Döşeme c) Pencere Menüsü Dikey Döşeme d) Pencere Menüsü Simgeleri Düzenleme Şekil 15. Alt formların (Child) düzenlenmesi
Şekil 16. Pencere Menüsü ve Alt Pencereler arasında geçişler Menüleri oluşturmak için kullanılan menü editörü Visual Basic derleyicisinin Tools (Araçlar) menüsünde yer almaktadır. Bu menü yardımıyla formların menüleri oluşturulur ve düzenlenir. Şekil 16 da Metin Editörüm uygulaması için hazırlanan menü öğeleri ve çeşitli özellikleri yer almaktadır. Menü öğeleri Caption ve Name olmak üzere iki önemli özelliğe sahiptir. Diğer nesnelerde olduğu gibi menü öğelerinin ve tıklandıklarında işletecekleri yordamların ayırt edilebilmesi için kullanılan Name özelliği ve diğeri ise menü öğesi hakkında kısa bilgi vermek amacıyla kullanılan Caption özelliğidir. Private Sub myeni_click() Private Sub myatay_click() MDIForm1.Arrange 1 Private Sub mbasamak_click() MDIForm1.Arrange 0 Şekil 17. Menü editörü Metin Editörüm uygulamasının menü öğeleri ve bazı menü yordamları