8 Ocak 2010 Cuma

Region

Region Nedir ?

          Region Visual Studio IDE sinde bulunan yardımcı bir kod parçası diyebiliriz.Amacı bizim belirlediğimiz aralıkta ki kodları gruplamak.Yani Programın çalışma sürecinde dikkate alınmaya ,yorum satırı diyebileceğimiz bir kod.

           Visual Studio IDE sinde yazdığımız fonksiyon ve procedurelerin yanında [-] şeklinde bir işaret çıkarak  otomatik gruplama oluşmaktadır.Fakat gruplama işlemini metot içlerinde belli bir kod parçasında yapmak istediğimizde bu yeterli değildir.Belli bir döngü veya şart bloklarını veya içinde hesaplamaların bulunduğu bi kısım kodu gruplamak istediğimizde #region imdadımıza yetişmektedir.

        Basit bir örnekle anlatmak gerekirse






ilk [-]  işareti Form1_Load proceduresi için otomatik eklenmişdir.Fakat ikinci [-] işareti bizim tarafımızdan loşturulmuştur.'#region Grupadi'  deyimi ile gruplamak istediğimiz kod başlangıcını belirtiyoruz #endregion ile grup sonunu belirtiyoruz . Grubu kapattığımızda ise



şeklinde bir görüntü oluşmaktadır..Görüldüğü gibi region-endregion arasındki kodlar kapanmış ve bizimyazdığımız etiket gösterilmiştir.
          Böylece yaptığımız uygulamalarda kod karmaşasını en aza indirebiliriz.

Herkese iyi çalışamalar

5 Ocak 2010 Salı

CheckedListBox

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 :)