C# ve .NET platformu kullanarak masaüstü yazılımları geliştirmeye karar verdiğinizde, grafiksel kullanıcı arayüzü (GUI) oluşturmak için en üretken ve popüler yollardan biri Windows Forms teknolojisidir. Windows Forms ile etkileşimli, zengin ve kullanıcılardan veri alıp uzak bilgisayarlarla iletişim kurabilen akıllı istemci uygulamaları (smart-client apps) tasarlayabilirsiniz. Bu teknolojinin tam kalbinde ise kullanıcıların gördüğü pencereleri temsil eden Form Sınıfı yer alır.
İlk defa masaüstü programlama yapacak ziyaretçilerimiz için hazırladığımız bu rehberde; Form sınıfının ne olduğunu, arka planda nasıl bir hiyerarşiye sahip olduğunu ve projelerinizde formların özelliklerini (Properties), metotlarını (Methods) ve olaylarını (Events) nasıl kullanacağınızı detaylı örneklerle öğreneceksiniz.
Form Sınıfı Nedir ve Arka Planda Nasıl Çalışır?
Herhangi bir Windows masaüstü uygulamasında en az bir tane kullanıcı arabirimi bulunur ve bu arabirimler Windows Forms mimarisinde Form sınıfından üretilen nesnelerdir. Formlar; TextBox, Button ve Label gibi kontrolleri üzerinde barındırarak kullanıcının etkileşime girebileceği görsel bir yüzey (taşıyıcı) oluştururlar.
Nesne Tabanlı Programlama (OOP) mantığına göre, Visual Studio’da projenize yeni bir form eklediğinizde aslında .NET kütüphanesindeki System.Windows.Forms isim uzayında (namespace) yer alan Form sınıfından miras (inheritance) alan yeni bir sınıf üretmiş olursunuz. Form sınıfının kendisi de daha üst sınıflardan miras alır. Hiyerarşik olarak incelediğimizde; en temel Control sınıfından türetilen ScrollableControl (kaydırma çubuklarını destekleyen sınıf), ondan türetilen ContainerControl (içindeki kontrollerin odaklanma -focus- yönetimini sağlayan sınıf) ve en nihayetinde hepsinin yeteneklerini barındıran Form sınıfı karşımıza çıkar.
Visual Studio ortamında bir form tasarlarken, araç kutusundan forma eklediğiniz her kontrol ve değiştirdiğiniz her ayar arka planda otomatik olarak InitializeComponent adında bir metot içine C# kodu olarak yazılır. Formunuz ilk açıldığında, formun yapıcı metodu (constructor) bu InitializeComponent metodunu çağırarak tüm görsel tasarımınızı ekrana yansıtır.
Programın Başlangıç Noktası: Program.cs
Bir C# Windows Forms uygulaması çalıştırıldığında, bilgisayar programın neresinden başlayacağını bilmek zorundadır. Tüm uygulamaların çalışmaya başladığı bu başlangıç noktası, Çözüm Gezgini (Solution Explorer) içinde bulunan Program.cs dosyasıdır.
Program.cs dosyasının içindeki Main fonksiyonu programın kalbidir ve aşağıdaki komutu barındırır:
Application.Run(new Form1());
Bu kod satırındaki Application.Run metodu, program başladığında ekrana ilk olarak hangi formun (bizim örneğimizde Form1) ana pencere olarak getirileceğini belirler.
En Sık Kullanılan Form Özellikleri (Properties)
Bir formun rengini, boyutunu, ekranda nerede duracağını ve kenarlık stilini Özellikler (Properties) aracılığıyla yönetiriz. Form sınıfında kullanılan en temel özellikler şunlardır:
- Text: Formun en üstünde yer alan başlık çubuğundaki yazıyı alır veya değiştirir.
- StartPosition: Program çalıştığında formun ekranın neresinde (örneğin tam ortasında:
CenterScreen) açılacağını belirler. - FormBorderStyle: Formun kenarlık stilini ayarlar; örneğin formun boyutlarının fareyle değiştirilmesini engellemek için
FixedToolWindowveyaFixedSingleyapılabilir. - Size / MaximumSize / MinimumSize: Formun genişlik ve yüksekliğini, alabileceği maksimum ve minimum boyutları belirler.
- MaximizeBox / MinimizeBox: Formun sağ üst köşesindeki büyültme ve küçültme butonlarını aktif veya pasif (görünmez) yapmak için kullanılır.
- ControlBox: Formun sağ üst köşesindeki çarpı (kapat), büyültme ve küçültme butonlarının bulunduğu kontrol kutusunun tamamını gösterir veya gizler.
- AcceptButton: Form aktifken kullanıcı klavyeden Enter tuşuna bastığında, sanki form üzerindeki belirli bir butona tıklanmış gibi işlem yapılmasını sağlar.
- CancelButton: Form aktifken klavyeden Esc tuşuna basıldığında tetiklenecek butonu belirler.
- ShowInTaskbar: Çalışan formun alt taraftaki Windows görev çubuğunda görünüp görünmeyeceğini belirler.
- WindowState: Başlangıçta formun ekrana tam ekran (Maximized), simge durumunda (Minimized) veya normal boyutta gelmesini ayarlar.
En Sık Kullanılan Form Metotları (Methods)
C# dilinde işlevleri gerçekleştiren kod bloklarına metot denir. Form sınıfının pencereleri yönetmek için kullandığı temel metotlar şunlardır:
- Show(): Hedef formu ekranda normal bir pencere olarak gösterir.
- ShowDialog(): Formu bir diyalog kutusu (modal) olarak gösterir. Gösterilen bu form kapatılmadan arka plandaki diğer formlara geçiş yapılamaz ve onlara tıklanamaz.
- Hide(): Aktif formu tamamen kapatmadan sadece ekrandan gizler.
- Close(): Formu tamamen kapatır. Eğer kapatılan form, programın başlangıç formuysa tüm uygulama sonlandırılır.
- Activate(): Formu aktif hale getirerek odağı (focus) ona verir.
- CenterToScreen(): Formun pozisyonunu otomatik olarak o anki ekranın tam merkezine yerleştirir.
En Sık Kullanılan Form Olayları (Events)
Olay (Event), kullanıcının veya sistemin gerçekleştirdiği eylemlere programın verdiği tepkilerdir. Bir formun yaşam döngüsündeki en temel olaylar şunlardır:
- Load: Form hafızaya yüklenip ekranda açılırken (görünmeden hemen önce) tetiklenen olaydır. Veri tabanından veri çekmek veya varsayılan ayarları yüklemek için mükemmel bir yerdir.
- Click: Formun boş bir alanına fare ile tıklandığı zaman gerçekleşir.
- FormClosing: Form kapanmadan hemen önce gerçekleşen olaydır. Kullanıcı pencereyi kapatmak için çarpı tuşuna bastığında “Kaydetmeden çıkmak istiyor musunuz?” gibi bir uyarı sormak ve gerekirse kapanma işlemini iptal etmek için kullanılır.
- FormClosed: Form tamamen kapandıktan sonra tetiklenen olaydır. Hafızadaki kaynakları temizlemek için idealdir.
Adım Adım Uygulama: Formlar Arası Geçiş ve Yönetim
Öğrendiğimiz özellikleri, metotları ve olayları birleştiren pratik bir örnek yapalım. Amacımız Ana Form (FormA) üzerinden yeni bir pencere (FormB) açmak ve bu formların özelliklerini kod ile yönetmektir.
1. Adım: Form Tasarımı ve Butonların Eklenmesi Projenize FormA ve FormB isminde iki farklı form ekleyin. FormA üzerine “Formu Aç” isminde bir buton (btnShow) ekleyin. FormB üzerine ise “Kapat” isminde bir buton (btnClose) ekleyin.
2. Adım: İkinci Formu Diyalog Olarak Açmak FormA içerisindeki butona çift tıklayarak kod ekranına geçin ve ShowDialog() metodunu kullanarak ikinci formu kilitlemeli (modal) olarak ekrana getirin:
private void btnShow_Click(object sender, EventArgs e)
{
// FormB sınıfından 'yeniForm' adında bir nesne türetiyoruz
FormB yeniForm = new FormB();
// Formu modal diyalog kutusu olarak gösteriyoruz
yeniForm.ShowDialog();
}
3. Adım: İkinci Formun Load (Yüklenme) Olayı Oluşturduğumuz FormB‘nin boş bir yerine çift tıklayarak Load olayını açın. Form ekrana gelirken arka plan rengini değiştirelim ve ekranın tam ortasında açılmasını sağlayalım:
private void FormB_Load(object sender, EventArgs e)
{
// Form ekranın ortasına alınır
this.CenterToScreen();
// Kullanıcıya bilgi mesajı verilir
MessageBox.Show("FormB yükleniyor.");
}
4. Adım: Kapanmayı Kontrol Etmek (FormClosing) Kullanıcı formu kapatmak istediğinde çalışan FormClosing olayı ile form kapanmadan hemen önce bir uyarı gösterebilirsiniz.
private void FormB_FormClosing(object sender, FormClosingEventArgs e)
{
MessageBox.Show("FormB kapanıyor.");
}
5. Adım: Buton ile Formu Kapatmak (Close) Son olarak FormB içindeki Kapat butonunun Click olayında Close() metodunu kullanarak formu sonlandıralım.
private void btnClose_Click(object sender, EventArgs e)
{
// this anahtar kelimesi içinde bulunduğumuz formu temsil eder
this.Close();
}
Sonuç
C# Windows Forms geliştirme ortamında Form Sınıfı, yapacağınız her masaüstü uygulamasının temel direğidir. Uygulamanızın başlangıcını Program.cs içinden ayarlayarak ilk pencerenizi oluşturabilir; form özelliklerini (Properties) kullanarak formun çerçevesini, boyutunu ve konumunu dilediğiniz gibi kişiselleştirebilirsiniz. Aynı zamanda ShowDialog() gibi metotlarla pencereler arası güvenli geçişler yapabilir, Load ve FormClosing olaylarıyla pencerelerinizin yaşam döngüsüne müdahale edebilirsiniz. Yukarıdaki örnek uygulamayı Visual Studio ortamında kendiniz deneyerek form sınıfının yeteneklerini çok daha kalıcı bir şekilde öğrenebilirsiniz. İyi kodlamalar dileriz!




