232-301-2136
kursat.arslan@deu.edu.tr
Buca Eğitim Fakültesi
Sosyal Bina, 2.Kat 207, İzmir
  • Ana Sayfa
  • Hakkımda
  • Blog
  • İletişim
  • Ders Kayit
  • Giriş
    E-mail Adresi:
    Şifre:
Savaş, ölünce değil, düşmana benzeyince kaybedilir. Aliya İzzetbegoviç
Excel (xls, xlsx) ve Not defteri (txt) uygulamalarından SPSS'e veri aktarma Kürşat Arslan tarafından eklenen son blog yazısı (25.12.2018)
Kürşat ArslanDokuz Eylül Üniversitesinde Dr. Öğretim Üyesi olarak çalışıyorum. SPSS ve Arduino özel ilgi alanım.

C# ta çalışma zamanlı (dinamik olarak) form nesneleri oluşturma

Yayınlanma: 7 Mayıs, 2018 Güncellenme: 14 Mayıs, 2018

Bu örneğimizde c# da dinamik olarak form nesnelerinin nasıl oluşturulduğunu ve bunlara eylemlerin nasıl eklendiğini  incelemeye çalışacağız. Bu örneğimizde şu ön bilgilere ihtiyacınız olacak: random() fonksiyonunu kullanma ve for/while döngüsü ve foreach döngüsü. 

Örnek

Örneğimizde, bir butona tıkladığımızda çalışma zamanlı olarak 10 tane textbox ve 1 tane buton oluşturulacak ve butona tıkladığımızda textbox lar içerisine rasgele sayılar atanacak ve bunların toplamı ve ortalaması yine çalışma zamanlı oluşturulan bir label'e yazdırılacak. Zor gibi görünmesine rağmen adım adım kolaylıkla yapılacak bir uygulama. Önce tasarım ekranıyla başlayalım.

Tasarım Ekranı

Örneğimizde tasarım ekranında sadece bir buton ve bir panel olacak, tasarım ekranı aşağıdaki gibi düzenleyin. ! formunuza panel eklemek zorunda değilsiniz ancak bu bazı işlemlerin daha kolay yürütülmesi için size bir kolaylık sağlayabilir.

c# dinamik form nesnesi olusturma -galloglu.com

Dinamik Olarak Nesnelerin Oluşturulması

Şimdi öncelikle Başla butona tıkladığımızda, çalışma zamanlı olarak 1 tane buton ve 10 tane textbox'ın oluşmasını istiyoruz. Textbox'ları Groupboxiçerisinde oluşturursanız örneği geliştirme adına daha kolay hareket edebilirsiniz. Bunun için aşağıdaki gibi bir kod yazmamız yeterli olacaktır.

Button btn = new Button();
btn.Text = "Topla";
btn.Location = new Point(10,50);
this.Controls.Add(btn);

int i = 0;
int top = 23;
int left = 10;

do
{
    TextBox txt = new TextBox();
    txt.Location = new Point(left, top * (i + 1));
    groupBox1.Controls.Add(txt);
    i++;
} while (i < 10);

Yukarıdaki koda bölüm bölüm bakalım. Öncelikle btn değişkenine buton özelliği aktarılıyor, sıralıyla buton adı "Topla", butonun formadaki yeri x=10 (Yani butonun formun soluna olan mesafesi) y=50 (yani butonun formun üstüne olan mesafesi) ayarlanıyor. Son olarak, belirlenen özelillkleriyle btn form'a ekleniyor. !burada this'in oluşturdğunuz formu temsil etiğini unutmayın.

İkinci bölümde ise, groupbox'ın içine ekleyeceğimiz 10 adet textbox için oluşturulacak döngüde gereken değişkenler belirleniyor. Burada ben do while kullandım ancak siz bunu farklı döngü yapılarıylada deneyebilirsiniz. bu bölümde i döngü için, top ve left ise değişkenleri textboxlar içinde yer belirlemede kullanacağız.

yukarıdaki kod bloğunda yer alan son bölümde ise, döngü oluşturuluyor ve 10 adet textbox oluşturuluyor. ! burada dikkat etmeniz gereken nokta butonları alt alta eklemek istediğim için sadece y değerini yani bu örnek için top değerini her seferinde belli ölçüde artırmak. Ben burada i değişkeni ile top değişkenini çarparak her seferinde 23 birim aşağı gitmesini sağladım. Siz bunu istediğiniz gibi artırıp azaltabilirsiniz.

Çalışma Zamanlı Oluşturulan Nesnelere Olay Eklenmesi

Şimdi çalışma zamanlı oluşturduğumuz "Topla" isimli butona bir olay eklememiz gerekiyor. Bunun için yukarıdaki kodun birinci bölümüne "this.Controls.Add(btn);" satırından önce aşağıdaki kod satırını eklemeniz yeterli olacaktır.

btn.Click += new EventHandler(topla);

şimdi topla isimli bir fonksiyon oluşturmamız ve gerekli kodları eklememiz gerekiyor.

Fonksiyon Oluşturma

Burada önemli olan nokta, fonksiyon içerisinde parametre olarak (object sender, EventArgs e)'nin eklenmesidir. Kalan kısım önceki açıklamalarıma göre kolaylıkla anlaşılabilir. Öncelikle birince bölümde, yine dğeişkenler oluşturuluyor, ikinci bölümde groupbox içerisinde oluşturuduğumuz textbox'lara tek tek ulaşarak 0 ile 99 arası bir değer atanıyor ve atanan bu değer sayı değişkeninde toplanıyor. Ve son olarak yine çalışma zamanlı bir label eklenerek bunun text değerine toplam ve ortalama değerleri yazılıyor. Hepsi bu kadar. Umarım kolayca yapabilirsiniz.

void topla(object sender, EventArgs e) {
    Random rnd = new Random();
    int sayi = 0;
    int rst = 0;

    foreach(Control abc in groupBox1.Controls)
    {
        rst = rnd.Next(100);
        abc.Text = rst.ToString();
        sayi += rst;
    }

    Label lbl = new Label();
    lbl.Text = "Toplam: " + (sayi).ToString()
                +"\n"+"Ortalama: "+ (sayi / 10).ToString();
    lbl.Location = new Point(groupBox1.Left,groupBox1.Top+groupBox1.Height);
    lbl.AutoSize = true;
    this.Controls.Add(lbl);
}

Son Ekran

Eğer yukarıda verilen bütün kodları doğru bir şekilde yazarsanız aşağıdaki gibi bir son ekran elde edeceksiniz. Başlat'a tıkladığınızda önce topla butonu ve textbox'lar oluşacak, sonra Topla butonuna tıkladığınızda rasgele sayılar oluşacak ve bu sayıların toplamı ve ortalaması label'e yazdırılacak.

! unutmayın. Bu örneği sayfadan bakarak yaptıktan sonra bakmadan yeniden yapmalısınız, böylece kesin olarak yapı aklınızda kalabilir. Örnekle ilgili yorumlarınızı bekliyorum.

Bir Yorum Bırak

Bu site Galloglu.com üzerinden, öğrencilerim ve diğer ilgili herkes için online içerik geliştirme amaçlı tasarlanmıştır. Özellikle SPSS ve ARDUINO blog yazıları, sizin bu konuları örnekler üzerinden daha iyi anlamanız için basitleştirilerek anlatılmıştır. Sitede yer alan içerikler, düzenli olarak kontrol edilerek hatalardan kaçınılmaya çalışılmaktadır, diğer taraftan bilgilerin tümüyle doğruluğu garanti edilemez.
Designed and Created by Kursat Arslan. Copyrigt © 2016-2019 I love ASP, SQL and Google.
Bu site Kürşat Arslan tarafından tasarlanmış ve geliştirilmiştir.
Bütün hakları saklıdır. Sitede yer alan bütün içerikler galloglu.com'a aittir.