Windows Form ListBox Kullanımı ve ComboBox ile Karşılaştırılması
Nesne yönelimli C# programlama meraklısı yazılımcı arkadaşlara yeniden merhabalar..
Uzun bir süredir iş yoğunluğum nedeniyle makale yazamadım tabi daha öncesinde vatani görevim askerlik sebebiyle ayrıca blogumdan uzun süredir ayrı kalmıştım ve şimdi yeniden karşınızdayım!
Bundan sonraki makalelerimi C# üzerine yoğunlaştıracağım için bugünkü makalem C# programlama dili üzerine olsun istedim ve bu makalemizde ListBox kontrolünü tanıyacağız,elbette nesne yönelimli programalama (object orianted programming) çerçevesinde olacak.
ListBox kontrolü tıpkı daha önce öğrendiğimiz ComboBox kontrolüne benzer bir yapıdadır ancak en
önemli ayırım yönü bir ComboBox kontrolü listede tek bir öğeyi seçmemizi sağlarken ListBox kontrolü ise bir listede birden çok öğe seçmemize olanak sağlıyor ve tabi ki ListBox kontrolünde istersek programımızı kullanacak bilgisayar kullanıcısına listedeki öğeleri tek tek seçtirmeye olanak sağlayacak şekilde programlayabiliriz ancak birden çok öğe seçtirmek için ListBox daha mantıklı geliyor kulağa...
ListBox kontrolünü tanıyabilmek için öncelikle Visual Studio'da bir proje oluşturalım ve formumuza
ToolBox penceresinden ListBox kontrolünü sürükleyip bırakalım:
Dipnot olarak geçmeden belirtmek isterim, bazı yazılımcı meslektaşlarım Visual Studio'nun sürükle-bırak yapısının yazılımcılığı körelttiğini ve yaratıcılığı öldürdüğünden bahsederler, aslında sürükle-bırak tekniği yazılımcının projeyi daha hızlı bir şekilde tamamlamasını sağlamakta ve deadline (yolun sonu) diye tabir ettiğimiz proje teslim tarihine daha kolay yetiştirmemize olanak sağlamaktadır ki bu Java Swing programlama da da böyledir.
Konumuza devam edelim ve formumuzun mavi başlık çubuğuna çift tıklayarak formumuzun load event'ine (olayına)
geçelim:
Yapmak istediğimiz ListBox kontrolümüze 1'den 100'e kadar olan sayıları doldurmak olsun, bunun için for döngüsünden yararlanıyoruz:
Programımızı çalıştırdığımızda ise ListBox kontrolüne sayıların geldiğini görüyoruz:
Varsayılan olarak ListBox kontrolümüzün çoklu seçil modu devre dışı olduğu için SelectionMode property'sine SelectionMode enumundan bir değer vermemiz gerekiyor:
Karşımıza çıkan SelectionMode seçeneklerine gözatalım:
- None seçeneği kullanıcının hiçbir öğeyi seçmesine izin vermez.
- One ile sadece öğelerden birini seçebiliriz ki varsayılan seçenek budur.
- MultiSimple ile kullanıcı klavyesinden Ctrl tuşuna basarak birden çok öğeyi seçebilir.
- MultiExtended ile kullanıcı farklı sıralardaki öğeleri klavyesinden Ctrl, Shift ve yön tuşlarını kullanarak seçimler yapabilir.
Bu dört seçenekten MultiSimple'ı seçiyor ve klavyemizin Ctrl tuşuna basılı tutarak mouse ile ListBox'taki öğeleri tıklayarak çoklu seçimi yapıyoruz:
İşte tam bu noktada ListBox'un ComboBox'tan farkını keşfediyoruz çünkü ComboBox bize listedeki elemanlardan
yalnızca birini seçmeye zorlarken ListBox birden çok elemanı seçme şansı sunuyor..
Şimdi gelelim konuyu nesne yönelimli olarak tanımaya, öncelikle kullanıcıdan ilgi alanlarını isteyeceğimiz "IlgiAlanlari" adlı sınıf oluştur ve int tipinde "id" ve string tipte "adi" isimli iki property (özellik) tanımlıyoruz:
Ardından, bu sınıftan new sözcüğüyle oluşturacağımız instance'larımızı (örneklerimizi) ListBox kontrolünde doğru
görüntülenebilmesi için sınıfımızın ToString() metodunu override (yeniden yapılandırma) ederek ListBox içerisinde
"adi" property'sini seçiyoruz:
Hatırlarsanız bu konuyu ComboBox kontrolünde yapmıştık ve ComboBox makalesinde bunu vurgulamıştım.
Formumuzun load olayına gelelim ve ListBox'a sayıları dolduran kodları yorum satırı haline getirerek devre
dışı bırakalım, böylece Visual Studio yorum satırı haline getirdiğimiz kodları işlemeyecektir:
"IlgiAlanlari" isimli sınıfımızdan birkaç instance oluşturalım:
Oluşturduğumuz ilgi alanları sınıf örneklerini tıpkı ComboBox kontrolüne ekler gibi Items.Add() metoduyla
ListBox kontrolüne ekleyelim:
Projemizi çalıştırdığımızda sınıf örneklerinin ListBox kontrolünde listelendiğini görüyoruz:
Elbette makalemiz burada henüz son bulmadı, şimdi de kullanıcının hangi ilgi alanlarını seçtiğini bulmaya
geldik,bunun için öncelikle formumuza bir buton ekliyor ve butonumuza çift tıklayarak click eventine geçiyoruz:
Kullanıcıdan hangi öğelerini seçtiğini alabilmek için ListBox'ın SelectedItems property'sini kullanıyoruz.
SelectedItems property'si bize, kullanıcının hangi öğeleri seçtiğini verir ancak biz de Visual Studio'ya kullanıcının
seçtiği öğelerin aslında birer IlgiAlanlari sınıfı örneği olduğunu bildiriyoruz, yani casting (rol tanımlama) işlemi
yapıyoruz:
Yaptığımız cast işlemi ile artık sınıfımızın property'lerine ulaşabiliyoruz tabi bu örnekte "adi" property'sini
kullanıyoruz:
Programımız kullanıcıya seçtiği ilgi alanlarının isimlerini söylemesi için string tipte bir değişken tanımlıyor
ve seçilen her ilgi alanının adını bu değişkene foreach döngüsünü kullanarak ekliyoruz:
Foreach döngüsü kendi içerisinde cast işlemi yapabildiği için alternatif olarak döngü başında seçilen nesnelerin
ilgi alanı sınıfı olduğunu da belirtebiliriz:
Son olarak MessageBox.Show() metodunu kullanarak kullanıcının seçtiği ilgi alanlarını ekrana yazdırıyoruz:
Tabi kullanıcı herhangi bir seçim yapmamış olabilir de, bunu göz önüne alarak SelectedItems property'sinin
Count alt property'sini if-else ile denetleyerek programımızın patlamamasını önlüyoruz :)
Sağlam bir program yaptığımızı düşünerek ListBox kontrolünü de tanımış olduk, bir sonraki makalemizde
görüşmek üzere hoşçakalın :)
Projeyi İndir