Bu yazımda C# kontrollerinin (button, textbox, label v.b) kod ile dinamik olarak oluşturulmasını ve bu kontrollere olay ekleme konularına değineceğim. Neden kontrolleri elimizle form üzerine eklemiyoruz diye sorabilirsiniz. Bazı durumlarda onlarca kontrolleri alt alta sıralamak, aralarında ki boşlukları ayarlamak ve bunları isimlendirmek canınızı sıkabilir. Bazen de dinamik yapıda yani duruma göre sayısı değişebilen kontrollere ihtiyacınız olabilir işte böyle durumlarda kontrolleri elle yerleştirmektense kod ile oluşturmak daha avantajlı olacaktır.
Form Üzerine Bir Label Kontrolü Ekleme
Basit bir örnek ile konuya giriş yapalım. Form üzerine label’i istediğimiz bir noktaya yerleştirerek, isimlendirecek ve text özelliği ile üzerine bir metin yazdıracağız.
1 2 3 4 5 6 7 8 9 10 11 12 |
private void Form1_Load(object sender, EventArgs e) { Label lbl = new Label(); //Bir label nesnesi oluşturur. Point lblyer = new Point(50, 50); lbl.Location = lblyer; //Label'i yerleştireceğimiz bir nokta belirliyor ve oraya konumlandırıyoruz. lbl.Text = "Label1"; lbl.Name = "lbl1"; //Label'ın name ve text özelliklerini değiştirdik. this.Controls.Add(lbl); //Son olarak form üzerine oluşturulan Label kontrolünü ekledik. } |
GroupBox İçerisine TextBox ve Button Kontrolü Ekleme
Bu örneğimizde elle eklemiş olduğumuz bir groupbox içerisine, bir adet textbox ve buton oluşturup, daha sonra butonumuzu işlevsel hale getirmek için bir click metodu tanımlayacağız.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
private void Form1_Load(object sender, EventArgs e) { //TextBox TextBox txt = new TextBox(); Point txtyer = new Point(50, 50); txt.Location = txtyer; txt.Name = "txt1"; groupBox1.Controls.Add(txt); //Button Button btn = new Button(); Point btnyer = new Point(50, 80); btn.Location = btnyer; btn.Name = "btn1"; btn.Text = "Tıkla"; groupBox1.Controls.Add(btn); btn.Click += new EventHandler(btn_Click); //Butona tıklandığında aşağıdaki btn_Click Event'i tetiklenir. } void btn_Click(object sender, EventArgs e) { //Kodlar } |
Döngü ile Kontrollerin Dinamik Olarak Oluşturulması
Bu örneğimizde ise bir zil programı için, zilin çalacağı saatleri belirleyen label ve maskedtextbox kontrollerini kodlar ile oluşturacağız. Kontrollerin yerlerini ayarlamak için tanımlanan değişkenler kafanızı karıştırmasın.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
private void Form1_Load(object sender, EventArgs e) { int x = 60; int y = 20; int ls = 1; int lx = 0; for (int i = 0; i < 24; i++) { if (i % 3 == 0 || i == 0) { y += 30; x = 100; lx = x; Label lbl = new Label(); Point lblyer = new Point(lx - 50, y + 5); lbl.Location = lblyer; lbl.Width = 40; lbl.Text = ls.ToString() + ".Ders"; lbl.Name = "lbl" + i.ToString(); ls++; groupBox1.Controls.Add(lbl); lx += 20; } MaskedTextBox txt = new MaskedTextBox(); Point yer = new Point(x, y); txt.Name = "txt" + i.ToString(); txt.Location = yer; txt.Width = 35; txt.Height = 25; txt.Mask = "00:00"; this.Controls.Add(txt); groupBox1.Controls.Add(txt); x += 60; } } |
Kontrollerin kodlar ile oluşturulmasıyla ilgili değişik örnekler üzerinden konuyu açıklamaya çalıştım. Konuyla ilgili sorularınızı bana iletebilirsiniz.
Merhaba benim yapamadığım bir şey var bunları yapıyorum sıkıntı yok fakat mesela textboxa girilen veriyi nasıl çekebilirim. Yani sonuçta birden fazla textbox oluşuyor ve adları txt1 txt2 gibi fakat ben örneğin
String a= txt1.text;
Yapmak istedigimde oradaki txt1 adinda bir nesne bulamadığı için program çalışmıyor. Bu dinamik olarak olusturulan nesneye nasıl ulaşabiliriz. Şimdiden cok teşekkürler makalede çok açıklayıcı
http://stackoverflow.com/questions/28276545/get-value-of-dynamically-created-textbox biraz geç oldu ama belki size ve sizden sonrakilere buradaki link sana yardımcı olacaktır.
Hocam merhaba
Kod ile oluşturulmuş butonu Form un acceptbutton u olarak nasıl belirleriz?
Merhaba hocam,
Bu kodlarınızdaki tekboxlara radio butona dönüştürerek öğrenci davranış değerlendirmesinde kullanmak istiyorum ve bunu becerdim :). Ancak labellara veriyi veritabanımdaki öğrenci adlarından almak istiyorum ve ne kadar öğrencim var ise o kadar label oluşacak. Kodlama nasıl olacak?
Hocam Selamun Aleyküm,
Maalesef tasarımı yaptıktan sonra gördüm makalenizi. Benim 110 kişilik bir yoklama ekranım var. .Textboxları ve radiobuttonları elle ekleyip isimlendirdim. Fakat benim radiobuttonların seçimine göre (Var/Yok/İzinli) textboxların backcolor unu değiştirip databese e durumlarını kaydetmek istiyorum. Bunun için nasıl bir döngü yazabiliriz?