Uzun süredir devam eden C# derslerimizde geçtiğimiz yazida temel programlama konularını geride bıraktık ve artık siyah beyaz konsol pencerelerinden kurtulup Windows Forms uygulamalarının renkli dünyasına adım atmaya hazırız. Grafiksel kullanıcı arabirimi (GUI) diye tabir edilen arayüzler farklı programlama dillerinin işletim sistemleriyle entegre olarak kullanıcıları metin tabanlı programların sıkıcı ve monoton yapısından kurtarırlar. Özellikle konsol uygulamaları için Visual Studio kullanmayı tercih etmemiş olabilirsiniz ancak Windows Forms tarafında uygulama geliştirmek istiyorsanız bu alışkanlığınızdan hemen vazgeçmenizi öneririm. Windows Forms uygulamaları geliştirmek için yine Visual Studio’nun ücretsiz Express sürümlerini kullanabilirsiniz.

GUI kütüphanelerinin desteklediği farklı öğeleri kullanarak uygulamalarımıza farklı özellikler kazandırmak da oldukça kolaydır. Butonlar, metin kutuları, ikon ve sekmeler gibi kullanıcıların aşina olduğu bu öğeler ile C# uygulamalarımız hem göze hitap edecek hem de daha işlevsel olacaklar. Yazının başında Windows Forms konusuna değineceğimizi belirtsek de burada yapacağımız örnekleri Linux altında Mono kullanarak da yapabilmeniz mümkün. Bildiğiniz gibi platformdan bağımsız olarak çalışan .NET uygulamaları Linux altında Mono Projesi kapsamında çalışıyor ve Mono çok güçlü GUI araçlarına sahip.

Visual Studio GUI konusunda çok güçlü araçlara sahip.

Yakın zamana kadar konu arayüz tasarımı olduğunda deneyimli programcılar bile temkinli davranır, uygulama dizaynının yanında programda kullanılacak arayüz araçlarının kullanımı hakkından uzun bir ön çalışma yaparlardı. Ancak Visual Studio, Windows Forms uygulamaları hazırlamak için çok kapsamlı yardımcılara sahip ve GUI araçlarının farklı pencerelerde kullanımını gerçekten oldukça kolaylaştırıyor. Farklı araçların sahip olduğu birçok özellik sağ tarafta bulunan bölmeden fare tıklamalarıyla değiştirilebilirken, öğelere ait olaylar yine çok kolay bir şekilde görülebiliyor ve programlanabiliyor. Formlar üzerine öğeler eklemek, boyutunu değiştirmek, bu öğeleri konumlandırmak, aksiyonlarını ayarlamak ve olayları tanımlamak gibi birçok ince detayı sadece farenizi kullanarak yapabilmek bizlere gerçekten önemli miktarda hız kazandırıyor.

İlk Uygulamamız

Sanırım en iyisi bir “Merhaba Dünya” uygulaması hazırlayarak anlattıklarımızın ne kadar kolay olduğunu deneyerek görmek. Visual Studio’yu açtıktan sonra New Project tuşuna tıklıyor ve artık “Windows Forms Application” öğesini seçiyoruz. Bu aşamadan sonra gri bir tual şeklinde boş formumuz karşımıza çıkacaktır. Dikkat ettiyseniz Formların ve üzerine eklediğiniz birçok aracın köşelerinde ve kenarlarının ortalarında bulunan daireler bu öğelerin yeniden boyutlandırılabilmesine olanak tanır. Kullanabileceğimiz bütün forms araçları ise solda bulunan araç kutusu (Toolbox)  içerisinde çeşitli kategorilere ayrılmış bir şekilde bizi beklemekte. Dilerseniz burada bütün öğelerin bulunduğu ilk sekmeyi açın ve buradan bir düğme (button) öğesini fareniz ile formun üzerinde istediğiniz yere taşıyın. Bu şekilde araçları taşırken çıkan kılavuz çizgileri ile doğru hizalama yapabildiğimizi ve birçok aracın düzenli bir şekilde yerleştirilebildiğini de hatırlatalım.

Çoğunlukla faremizi kullanarak bir Forms uygulaması hazırladık!

Dizayn ekranında bulunan her türlü öğenin sahip olduğu stil, fonksiyon ve değişkenleri değiştirmeye yönelik birçok özelliği bulunmaktadır. Bu özellikleri görebilmek ve değiştirebilmek için bu öğelere sağ tuşla tıklayıp özellikler (Properties) seçeneğini seçerseniz, ekranın sağ tarafında ilgili bölmesi açılacaktır. Örneğin yeni yerleştirdiğimiz butonu düşünecek olursanız burada fare ile değiştirebildiğimiz konum ve boyut özelliklerinden, butonun rengi, biçimi, üzerindeki yazı ve bu yazının stili gibi birçok ince ayara ulaşabilmemiz mümkün.

Dilerseniz ilk örneğimizi tamamlamak için butonun üzerine bir tane metin kutusu (TextBox) aracını da araç kutusundan seçerek formumuza yerleştirelim. Uygulamamız buraya yazacağımız değeri alarak bir mesaj kutusu içerisinde gösterebilen temel bir uygulama olacak. Ancak yine de metin kutusunun başına bir açıklama koymak isteyebiliriz ve bunun için tek yapmamız gereken araç kutusundan bir etiket (Label) nesnesini faremiz ile forma eklemek olacaktır. Özellikler bölmesinde bulunan Text değerlerini değiştirerek bu öğelerin metin değerlerini istediğimiz gibi ayarlayabiliriz. Yeni eklediğimiz Label ve Button nesnesinin bu değerini de ayarladıktan sonra sıra geldi butona basıldığında nelerin olacağını ayarlamaya.

ToolBox içerisinde birçok araç mevcut.

Events

Dilimize “olaylar” olarak çevirebileceğimiz events, bir öğenin belirli şartlar altında yapacağı aksiyonları belirleyen fonksiyonları uygulamaya ekler. Uygulamanın çalışması esnasında farenin bir öğenin üzerine gelmesi, belirli bir tuşa basılması veya seçili duruma gelmesi gibi kullanıcı tarafından meydana getirilen bu olaylar, programda bulunan belirli bir fonksiyonu tetikleyerek istediğimiz aksiyonun gerçekleşmesini sağlar. Birçok araç için en çok kullanılan olayların fonksiyonları, o aracı bir formun üzerine sürükledikten sonra üzerine fare ile çift tıklarsanız otomatik olarak kod sayfasına eklenecektir. Ancak bunlardan farklı bir olay için fonksiyon tanımlamak isterseniz, bunu Properties bölmesinde bulunan Event butonuna tıklayarak çıkan olay listesinden ilgili olaya çift tıklayarak gerçekleştirebilirsiniz.

Araçlar değişik olaylara yanıt verebiliyorlar.

Bizde ilk örneğimizde eklediğimiz düğmeye tıklandığında bir mesaj kutusu ile kullanıcılarımıza selam vermek istiyoruz. Bunun için dizayn ekranında eklediğimiz butona çift tıklayarak onun olay fonksiyonunun (button1_Click) yaratılmasını sağlıyoruz. Daha sonra bu fonksiyona bir mesaj kutusu içerisinde önceden eklediğimiz metin kutusundan alacağımız değerle birlikte bir mesajı aşağıdaki kod ile yazdırabiliriz:


private void button1_Click(object sender, EventArgs e)

{

MessageBox.Show("Merhaba, " + textBox1.Text + "!");

}

Burada MessageBox, Windows Forms kütüphanesi altında bulunan mesaj kutularına ait nesnedir. İçerisine aldığı string tipindeki değişken değerini göstermeye yarar ve konsol uygulamalarında sıkça kullandığımız Console.WriteLine() fonksiyonu gibi kullanıcıya mesaj vermekte kullanılır. Burada dikkat etmemiz gereken diğer bir nokta textBox1 ismindeki değişkendir. Formumuza ekleyeceğiniz bütün araçlar, isminin küçük harfle başlayan ve sonunda bir numara görebileceğiniz değişkenler yardımıyla kod içerisinde kontrol edilebilir.  İlk örneğimizi bitirdikten sonra diğer araçların kullanımını öğrenmeye devam edebiliriz.

Button aracının özellikleri.

En önemli GUI nesneleri arasında sayabileceklerimizden biri hiç şüphesiz diğer araçları içinde bulunduran panellerdir. .NET içerisinde bulunan panel araçlarından biri olan sekmeler ise programcılar tarafından en çok sevilenlerden biridir. Dilerseniz ikinci örneğimize geçmeden önce formumuza bir sekme kontrolü (TabControl)  aracı ekleyerek ikinci örneğimizi farklı bir sekmede hazırlayalım. Sekmeler tabPage adı verilen yapraklardan oluşur ve sekme kontrol nesnesine sağ tuşla tıklayınca menüden  “Add Tab” seçeneği ile bu yaprakların yenilerini eklemek mümkündür. Biz ikinci örneğimizde doğumumuzdan itibaren kaç gün geçtiğini hesaplayan küçük bir uygulama hazırlayacağız ve bunun bütün bileşenlerini ikinci sekmemizde bulunduracağız.

Dizayn ekranında formda bulunan ikinci sekmeye tıkladığınızda boş bir panel elde etmiş olacağız. Bu alana doğum günümüzü girmemiz için bir metin kutusu ekleyebilirdik ancak bu tür tarih konularında kullanıcılara daha kolay bir arayüz sağlayan DateTimePicker aracı işimize daha çok yarayacaktır. Bu aracı formumuza ekledikten sonra altına bir buton yerleştirerek şimdiki zamanla seçilen tarih arasında kaç gün geçtiğini hesaplayan fonksiyonu çalıştıracak bir tetikleyici bulundurabiliriz. C# içerisinde geçerli tarih ve saat  değerlerini tutmak için hazırlanmış bir veri tipi bulunur. DateTime ismindeki bu veri tipleri 1970 yılı Ocak ayından beri artan bir değere sahiptir ve bu değere göre zamanı saklar. Sakladığı değer long tipinde bir sayı olsa da, tarihsel bir değer istediğimiz zaman bize yıl, hafta, gün ve saat gibi farklı aralıklarda istediğimiz türden veri döndürebilen fonksiyonları bulunmaktadır. DateTime nesnelerinin bir diğer kullanım alanı da Now isimli özelliğinin “çağırıldığı zamanı” döndürerek zaman aralığı hesaplamalarında bize yardımcı olabilmesidir.


private void button2_Click(object sender, EventArgs e)

{

//Örnek 2

DateTime dt = dateTimePicker1.Value;

DateTime simdikiZaman = DateTime.Now;

TimeSpan zaman = simdikiZaman - dt;

MessageBox.Show("Siz dogduktan sonra " + zaman.Days +" gün geçmis. ");

}

Ancak iki zaman arasında matematiksel işlem yapmak kolay olmayacağı için TimeSpan isimli başka bir nesneden de yardım almamız gerekebilir. Biz de örneğimizde butonumuzun tıklanma olayına önce DateTimePicker nesnesinin sahip olduğu değeri ve şimdiki zamanı saklayan iki adet DateTime nesnesi oluşturarak başlıyoruz. Daha sonra eklediğimiz bir TimeSpan objesi bu öğelerin arasındaki zamanı saklamak için kullanılıyor. En son yaptığımız işlem ise ortaya bir mesaj kutusu çıkararak bu iki tarih arasında kaç gün olduğunu kullanıcıya bildirmek oluyor.

İkinci örneğimizin dizayn görüntüsü.

Windows Forms uygulamalarına giriş yapmamızı sağlayan örneklerimizde bazı kullanıcı arayüzü araçlarını tanıtma fırsatımız oldu. Aralarında renk seçmeye yarayan ColorDialog gibi aşina olduklarımızdan, seri porttan veri gönderip almaya yarayan araçlara kadar birçok çeşit bulunan bu araçları, sahip olduğu özellikleri ve olayları boş zamanlarınızda incelemenizi tavsiye ederim. C# ve .NET ile geliştirilmesi çok kolay bir hal alan Forms uygulamaları, internet tabanlı uygulamalar ne kadar gelişse de günümüzde hala oldukça yoğun kullanıma sahip olan ve kullanıcıya gerçekten birçok kolaylık sağlayan bir yapıya sahip. Hazırladığınız uygulamayı kullanıma açmadan önce farklı bilgisayarlarda, çözünürlüklerde ve farklı sürüm Windows işletim sistemlerinde denemeniz de önemli. Örneğin bir takım araçların stil ve görünüm özellikleri farklı Windows temaları altında bile değişiklik gösterebilir.

Bu yazıyla birlikte blogumdaki C# dersleri serisinin sonuna geliyorum..  Dersler hakkındaki görüşlerinizi benimle paylaşırsanız çok sevinirim, umarım bu yazılar bazılarına yardımcı olabilmiştir! :) Sizden gelen görüşlere göre derslere devam edebilir yada farklı konularda buna benzer yazılar hazırlayabilirim, yeter ki fikirlerinizi belirtin :)

p.s. Bu yazı Ocak 2009 tarihinde yazılmıstır.

Related posts:

  1. C# Dersleri – 6: Fonksiyonlar ve Sinif Yapilari
  2. C# Dersleri – 5: Diziler
  3. C# Dersleri – 4: Döngü Yapilari
  4. C# Dersleri – 6: Fonksiyonlar ve Sinif Yapilari
  5. C# Dersleri – 5: Diziler