1. Ana Sayfa
  2. C Sharp

C# Dinamik Form ve Nesneler Üretip Kullanmak

C# Dinamik Form ve Nesneler Üretip Kullanmak
+ - 1

Merhaba arkadaşlar, C# Dinamik Form ve Nesneler Üretip Kullanmak yazım ile C# eğitim setime devam ediyorum. Bu derste C#’ta dinamik form ve nesneler üretip kullanma konusuna bakacağız. Dinamik form ve nesneler üretip, eventler atayıp kullanacağız.

C# Dinamik Form ve Nesneler Üretip Kullanmak

Ben projelerimde cari, stok, personel gibi gibi seçimlerde bir liste üzerinden seçim yaptırma yöntemini kullanıyorum. Yani iki textbox bir button kullanarak, butona tıkladığımda açılan listeden seçtiğim stoğun kodu ve adını textboxlara yazıyorum. Bu derste bu mantığı anlatmayacağım ama size kullandığım bu seçim listesini nasıl fiziksel olarak bir form tanımlamadan sadece kod ile yaptığımı anlatacağım.

Evet, kod ile form üretiyorum. Bu forma bir grid ekliyorum. Gridi dolduruyorum. Grid üzerinde çift tıklama yaptığımda tıkladığım satırdaki adı ve kodu bilgisini alıp formu kapatarak aldığım bilgileri arkadaki formda ilgili yerlere yazıyorum. Ve bunu da bir kaç satır kod ile yapıyorum. (Elbette asıl kodlar class içinde. :) )

Aşağıda kısa tanıtım videosu görebilirsiniz.

Yakın zamanda videolar çekmeye başladığım için bu konu hakkında da bir video çekmiştim. Yukarıdaki videonun aksine kodlarını beraber yazıyoruz. :) Videonun sonunda da bu yazıdaki konudan biraz bahsediyorum.

 

İnanıyorum ki bu açıklama sizi heyecanlandırdı. O halde çok fazla bekletmeden kodları vereyim. :)

Örneğimizde, bir stok seçim listesi yapmak yer alıyor. Gerçi bu stok, cari vs fark etmiyor. Neyin sorgusunu verirseniz onun listesi olacak. Hadi C# dinamik form üretme ve kullanma kodlarımıza geçelim.

C# Dinamik Form ve Nesneler Üretip Kullanmak

Formumuza bir label, iki textbox ve button ekliyoruz. Buttona tıkladığımızda kodlarımız çalışacak karşımıza içinde veriler olan bir datagridview olan bir form açacak. Bir hücreye tıkladığımızda o satırdaki verileri alacak ve arkadaki textboxlara kapanırken yazacak. Eveti datagridview’de bir satıra tıkladığımızda form kapanacak ve veriler otomatik yazılacak.

Öncelikle class’ımıza aşağıdaki namescpace’leri ekliyoruz.

using System.Data;
using System.Windows.Forms;

Windows nesneleri ve DataTable kullanabilmemiz için gereklidir. Class içerisinde bu namespace’ler otomaik eklenmiyor.

Şimdi dinamik form üretmek içi ve dönüşte textboxlara verileri yazabilmemiz için kullanacağımız nesneleri tanımlıyoruz.

        private static Form fr = new Form();
        private static DataGridView dgv = new DataGridView();                
        private static TextBox txt_kod;
        private static TextBox txt_ad;

Class’ı tanımlama zorunda olmamak için işlemlerimizi static olarak yapacağız. Bu nesnelerin class’ı çağırırken görünmemesi için private yapıyoruz. Buradan Erişim Belirleyiciler (Access Modifiers) hakkında daha detaylı bilgiler alabilirsiniz.

C# Dinamik Form ve C# Dinamik DataGridView Üretmek

Bize formu açacak metodumuzu yazıyoruz.

        /// <summary>
        /// Otomatik seçim listesini açar. DataGridView ekler ve DataGridView'i sql_query sorgusuna göre doldurur
        /// </summary>
        /// <param name="txt_kodu">Kod bilgisinin yazılacağı TextBox</param>
        /// <param name="txt_adi">Ad bilgisinin yazılacağı TextBox</param>
        /// <param name="sql_query">DataGridView 'de görünecek listenin SQL sorgusu</param>
        /// <param name="FormBaslik">Seçim listesinin form adı. Varsayılan - "Seçim Listesi"</param>
        public static void SecimListesiAc(TextBox txt_kodu, TextBox txt_adi, string sql_query, string FormBaslik = "Seçim Listesi")
        {
            dgv.Dock = DockStyle.Fill;
            dgv.CellClick += Dgv_CellClick;
            dgv_update(sql_query);

            txt_kod = txt_kodu;
            txt_ad = txt_adi;

            fr.Height = 600;
            fr.Width = 400;
            fr.Controls.Add(dgv);
            fr.StartPosition = FormStartPosition.CenterScreen;
            fr.Text = FormBaslik;
            fr.ShowDialog();
        }

En üst kısımda Summary yazarak metod ve parametreleri hakkında bilgi veriyoruz.

İlk olarak DataGridView’i ayarlıyoruz. Dock özelliğini fill yapıyoruz ve tıkladığımızda verileri alabilmek için dinamik CellClick eventi atıyoruz. dgvUpdate() metodumuz, ana metodumuza gönderdiğimiz sql sorgusuna göre DataGridView’i dolduracak.

Arkadaki formda kalan textbox’lara seçilen verileri yazmak için class içerisinde tanımladığımız textbox’lara, parametre olarak aldığımız textbox’ları atıyoruz.

Form yükselik ve genişlik özelliklerini ayarladıktan sonra oluşturduğumuz DataGridView’i forma ekliyoruz. Form ekranın ortasında olmasını istiyoruz ve form başlığının parametre olarak aldığımız başlık olmasını isteyip formu ekrana getiriyoruz.

C# Dinamik Nesneye Event Atama

        private static void Dgv_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewRow row = dgv.Rows[e.RowIndex];
            if (row != null)
            {
                txt_kod.Text = row.Cells["Kod"].Value.ToString();
                txt_ad.Text = row.Cells["Ad"].Value.ToString();
                fr.Close();
            }
        }

Burada dinamik forma eklediğimiz dinamik DataGridView‘in CellClick eventini görüyorsunuz. Buradaki dersimdeki gibi tıklanan satırın verilerini alıyoruz.

NOT 1: dgv.CellClick += yapıp TAB+TAB yaparsanız yukarıda gördüğünüz event otomatik oluşur ve sizde içerisini düzenleyebilirsiniz.

NOT 2: Dikkat ettiyseniz, burada Kod ve Ad kolonlarındaki bilgileri al dedik. Eğer hazırladığınız sql suery’de Kod ve Ad kolonları yok ise hata alırsınız. Gönderdiğiniz sorgunun uzunluğu önemli değil ancak sorgunuzda Kod ve Ad kolonlarının olması gerekiyor.

C# Dinamik DataGridView’i Doldurmak

        private static DataTable RastgeleDT()
        {
            DataTable dt = new DataTable();
            dt.Clear();
            dt.Columns.Add("Kod");
            dt.Columns.Add("Ad");
            DataRow row1 = dt.NewRow();
            row1["Kod"] = "PC1";
            row1["Ad"] = "Bilgisayar 1";
            dt.Rows.Add(row1);

            DataRow row2 = dt.NewRow();
            row2["Kod"] = "HDD1";
            row2["Ad"] = "HDD 1";
            dt.Rows.Add(row2);

            DataRow row3 = dt.NewRow();
            row3["Kod"] = "ETHERNET1";
            row3["Ad"] = "ETHERNET 1";
            dt.Rows.Add(row3);

            return dt;
        }

        private static void dgv_update(string sql_query)
        {
            // RastgeleDT() metodu projede sql bağlantısı olmadığı için örnek olması amacı ile yapılmıştır. 
            // Burada parametre olarak alınan SQL Sorgusunu DataGridView' e dolduracak kodları yazarsınız.

            try
            {
                dgv.DataSource = RastgeleDT();
            }
            catch (InvalidOperationException)
            {
            }
        }

Ben burada örnek olması amacı ile bir DataTable hazırlayıp kullandım. Ancak sizler projelerinizde kullanacağınız zaman RastgeleDT() metodunu silip, parametreden gelen sql sorgusuna göre DataGridView’i doldurursunuz.

Burada Try Catch kullanmak zorunda kaldım çünkü bir kaç seçimden sonra InvalidOperationException hatası veriyordu. Bunun sebebini tam olarak bilmiyorum. Ben bu kodları normalde DevExpress GridView ile kullanıyordum ve böyle bir sorun yaşamamıştım. InvalidOperationException hatası için Try Catch kullandıktan sonra bu hatayı doğal olarak almıyoruz ve listeyi açmama gibi bir sorun yaşamıyoruz.

 

Evet arkadaşlar, bu dersimizde C# Dinamik nesneler oluşturmak,  C# Forma dinamik nesne eklemek,  C# Dinamik nesnelere event atamak ve C# Dinamik nesneler ile çalışmak konularına bakmış olduk. Bunun gibi bir ders daha gelebilir ileride ama ne zaman gelir bilemiyorum. Umarım sizler içinde faydalı olmuştur.


C# Dinamik Form ve Nesneler Üretip Kullanmak projemizde bu kadardı arkadaşlar. Diğer projelerimizde görüşmek üzere…

C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.

Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersimde Github ‘da yerini almıştır. Linke tıklayarak Github sayfasına gidebilir ve indirebilirsiniz.

Sağlıcakla ve takipte kalın. ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)

Yorumlar (1)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.