12 Kasım 2010 Cuma

Dinamik Kodlama ile Kullanıcı Kayıt Formu


Bu örnekte sizlere dinamik kodlama mantığını kullanıcı kayıt formu yaparak anlatmaya çalışacağım..

dinamik kodlama nedir açıklayalım..

Dinamik Kodlama : Oluşturduğunuz programa ekleyeceğiniz yeni kontrollerde programın kod kısmını tekrar düzenlemek zorunda kalma gereği duymamanızdır.Anlatacağım örnekle bu tanımı somutlaştırmaya çalışacağım.

Formu oluştururken ilk olarak Toolboxda Containers sekmesinden Paneli seçip forma yerleştirin.Sonrasında diğer kontrolleri Panel’in üzerine ekleyin.Bu Dinamik kodlamada bütün kodlamalarımızı bu panel içinde halledeceğiz.


Öncelikle butonların click event’ını tek bir butonda toplayacağız yani Temizle butonuna tıkladığımızda aslında Kaydet butonunun click event’ına gireceğiz.



Kaydet ve Temizle butonlarını seçerek Form1 in Properties sekmesinden şimşek şeklindeki icona tıklayarak seçtiğimiz butonların eventlarına girdik. 2 butonunda Click event’ını şekilde de görüldüğü üzre BtnKaydet_Click Yaptık.  Bu işlem bizi kod fazlalığından kurtarır örneğin bir forma 100 tane buton koymanız gerekti her birine ayrı ayrı Click event’ı açmak mı daha iyi olur yoksa hepsini bir Clickte toplamak mı ?

private void BtnKaydet_Click(object sender, EventArgs e)

// BtnKaydet butonumuzun Click event’ına girdik.

        {

            Button gonder = (Button)sender;

// Buton nesnesi oluşturduk BntKaydet_Click event’ına sender olarak gelen tüm nesneleri bu buton nesnemize eşitledik.

         if (gonder.Text == "Kaydet") // eger butonumuzun click’ine gelen butonun text’i Kaydet ise
            {

FileStream fs = new FileStream("D:\\OgrenciKayit.txt", FileMode.Append, FileAccess.Write);

// D de OgrenciKayit adlı bir klasör yoksa oluştur varsa yazmak için içine gir dedik.

                StreamWriter sw = new StreamWriter(fs);

// Yazım işlemleri için StreamWriter sınfından bir nesne tanımladık.
               
                     
 for (int j = 0; j < panel1.Controls.Count; j++)

 // Oluşturduğumuz panelin üstünde kaç tane kontrol(textbox,radiobutton,button) varsa o kadar döndürecek olan döngüyü yazdık.
 
 {
    if (panel1.Controls[j] is TextBox )

         // Eğer panelimizin kontrollerinden j. kontrol TextBox ise

             {
               sw.WriteLine(panel1.Controls[j].Text);

               // OgrenciKayıt dosyasına TextBox’ın Textini yazdık.

             }
                           
     if(panel1.Controls[j] is ComboBox)

                // ComboBox ise Combobox’ın Text ini dosyaya yazdık.

             {
                sw.WriteLine(panel1.Controls[j].Text);
              }
     if (panel1.Controls[j] is RadioButton)
            {

                RadioButton r = (RadioButton)panel1.Controls[j];

                        if (r.Checked == true)

                           {
                              sw.WriteLine(panel1.Controls[j].Text);
                           }
           }

                              
                        // Eğer panel1 RadioButtonsa RadioButton türünden r adlı bir nesne tanımladık ve   Panel1’in radio button kontrolünü r türünden bir radio butona atadık. Burada RadioButonun kendine has Checked özelliğini kullanacağımız için bu işlemleri yaptık if ( panel1.Controls.Checked==true ) deseydik yanlış bir işlem yapmış olacaktık çünkü panel1.Controls de belli başlı genel propertyler vardır.
                           
                        }
                        sw.Flush();
                        sw.Close();

                        MessageBox.Show("Girmiş olduğunuz bilgiler başarıyla Kaydedildi");
                   
            }
       if (gonder.Text == "Temizle")

            // eger butonumuzun click’ine gelen butonun text’i Temizle ise

            {

          for (int j = 0; j < panel1.Controls.Count; j++)

            // Panel’in kontrolleri içinde gezmek için bir döngü oluşturduk.

                    {

            if (panel1.Controls[j] is TextBox || panel1.Controls[j] is ComboBox)

                            {
                                panel1.Controls[j].Text = "";
               // panel1’in Kontrolleri TexBox veya ComboBox olanların Text’ini boşalttık.

                            }
                            if (panel1.Controls[j] is RadioButton)

                               // eğer panel1’in kontrolü radiobutton ise
                            {
                               
                  RadioButton r = (RadioButton)panel1.Controls[j];

                                r.Checked = false;

                       // Checked özelliğini false yaparak ve seçili olan radiobutton seçeneğinin seçimini kaldırdık.

                            }
                        }
                    }
               
           
        }

Hiç yorum yok:

Yorum Gönder