CheckedListBox
CheckedBoxList componenti genel olarak bir grup veri arasından bir veya birden fazla seçim yapmak için kullanılır.ListBox dan farklı olarak listedeki değerlerin yanında seçmek için bir checkbox bulunur.
Görüntüsü ;
şeklindir.
Aslında component özelliklerine bakarsak normal bir Listboxdan farksız olduğunu görüceksiniz.Aslında öyle.Bikaç Ayrıntı Hariç.Birkaç özelliğini incelemek gekirse ;
Listeye bir veri eklemek istediğimizde veya verilerle ilgili diğer işlemlerde ListBoxda olduğu gibi items altında bulunan metotlar kullanılır.
CheckedListBox1.Items.Add("Kastamonu"); //Listeye Veri Ekle
int i = CheckedListBox1.Items.IndexOf("İstanbul"); //İstanbul bilgisini index değerini bul
string value = CheckedListBox1.Items[1].ToString(); //indexi 1 olan veriyi oku
Buraya kadar ListBoxdan çokta farklı olmadığını gördük.ListBox dan farklı olarak ise ;
for (int i = 0; i < CheckedListBox1.CheckedItems.Count; i++)
{
MessageBox.Show(CheckedListBox1.CheckedItems[i].ToString());
}
Yukarıda lisetede seçili olan elemanları CheckListBoxın CheckItem özelliğinden faydalanarak mesaj olarak gösterdik.Tabi burada amaç sadece ne işe yaradığını öğrenmek.
MessageBox.Show yerine bir çok farklı kod yazılabilirdi..Bunlardan biride seçilen kayıtların veritabanına yazılması gibi.
CheckBoxın birkaç önemli özelliğinden bahsetmek gerekirse
bool status = CheckedListBox1.GetItemChecked(1);//Listede Indexi 1 olan verinin seçim durumunu göster
listedeki bir değerin durumu öğrenme gösterilir.Bunun tersi olarak ise
CheckedListBox1.SetItemChecked(1, true);//Indexi 1 olan verinin seçimini true yap
listedeki bir değerin durmunu değiştirme olabilir.
CheckListBoxın önemli özelliklerinden biride
CheckOnClick özelliği.Listeden seçim yaparken tek tıklamadamı yoksa çift tıklamadamı seçileceği.
CheckOnClick=false ; durumunda eğer listeden bir değeri ilk defa seçiyorsanız sadece o satır seçilir.Yanındki kutucuğun değerini değiştirmek isterseniz tekrar tıklamanız gerekecektir.Bu ise seri işlemlerde zaman kaybına yol açmaktadır.
CheckOnClick=true; durumuda ise listeden bir değeri seçdiğiniz anda yandaki kutucuğun durumu değişir.Bu gibi durumda ise listedeki veriler arasında dolaşırken istenmeyen sonuçlara neden olur.
Bu iki farklı durumda da tam istediğimiz sonucu elde edemedik.Aslında
TreeView componentinde olduğu gibi sadece kutucuğa tek tıklayarak durumunu değiştirmek işimizi görebilirdi.Ama componentin özelliğinide değiştiremezdik :).Bunun yerine bir takım kodlar yazaran bunu mümkün kılmak gerekirdi.Yine
TreeView componetinden yola çıkarak düşünmek gerekirdi.Kutucuğa tıklanıldığında durmunun değişmesi ...Tam da istediğim buydu.Burdan yola çıkarak bir kaç kod ile bu sorunu hallettim..
Kodları inceleyecek olursak ;
int EskiDeger=-1 ;
//Listenin son index değerini tutmak için tanımlı değişken
//Bu değişkeni tanımlamızın amacı seçilen veri üzerinde ek bir işlem yapmaya gerek duymamak.Eleman seçili ise tek tıklama ile kutucuğun durumu değiştirlebilir.
private void CheckedListBox1_MouseDown(
object sender,
MouseEventArgs e)
{
//Listeye Mouse ile tıklandığı anda işlemler gerçekleşmeli
if (e.X < 14)
// İlk olarak tıkladığımız yerin X konumu kontrol ediyoruz..kutuya tıkladığımızdan emin olmamız lazım Buradaki 14 değeri yaklaşık olarak kutucuğun genişliğidir
{
int Secilen=CheckedListBox1.SelectedIndex;
//Seçilen değerin index değerini alıyoruz
if (EskiDeger!=Secilen)
//Burada seçilen değerin üzerinde işlem yapmak istemediğimizden bir önceki değer ile karşılaştırıyoruz
{
bool durum=CheckedListBox1.GetItemChecked(
Secilen);
//Tıkladığımız kutunun değerini oku
CheckedListBox1.SetItemChecked(
Secilen, !
durum);
//Burada ise tıkladığız değerin durumu ! işareti ile tersine döndürdük (true ise false / false ise true olacaktır)
}
EskiDeger=Secilen
//Son olarak ise EskiDeger değişkenine seçtiğimiz index numarısnı yazmak
}
}
Kodlarımız bu kadar kısa ve basit.Fakat yaptığı iş gerçekten önemli..Artık listedeki bir kutucuğu seçmek için o satırı seçmemize gerek kalmayacaktır :)
Herkese minimum hatalı programlar :)