C# ta Çalışma Zamanlı (dinamik olarak) Form Nesneleri Oluşturma

Bu örneğimizde c# da dinamik olarak form nesnelerinin nasıl oluşturulduğunu ve bunlara eylemlerin nasıl eklendiğiniincelemeye ç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# ta Çalışma Zamanlı (dinamik olarak) Form Nesneleri Oluşturma

Ş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.

C# ta Çalışma Zamanlı (dinamik olarak) Form Nesneleri Oluşturma

Örnek 2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ders2
{
    public partial class Form1 : Form
    {

        public void çalıştıroto()
        {
            int sayi = Convert.ToInt32(textBox1.Text);
   
           
            while (sayi > 0)
            {
                sayi--;

                Random randomknm = new Random();
                int xkonm = randomknm.Next(this.Width);
                int ykonm = randomknm.Next(this.Height);

                //MessageBox.Show(" " + xkonm + " " + ykonm);
                Button butn = new Button();
                butn.Location = new Point(xkonm, ykonm);
                this.Controls.Add(butn);
                System.Threading.Thread.Sleep(100);
            }            
        }
        public Form1()
        {
            InitializeComponent();
        }

        private void label1_Click(object sender, EventArgs e)
        {
            çalıştıroto();
        }
    }
}

C# ta Çalışma Zamanlı (dinamik olarak) Form Nesneleri Oluşturma

Örnek

C# ta Çalışma Zamanlı (dinamik olarak) Form Nesneleri Oluşturma

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace TryCatchUygulaması
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
       


        private void button1_Click(object sender, EventArgs e)
        {

            try
            {
                int ahm = Convert.ToInt32(textBox1.Text);

                for (int i = 0; i < ahm; i++)
                {
                    Random rnd = new Random();
                    int konumy = rnd.Next(this.Height);
                    int konumx = rnd.Next(this.Width);
                    int yükseklik = rnd.Next(40, 60);
                    int genişlik = rnd.Next(30, 60);
                    PictureBox ahmet = new PictureBox();
                    ahmet.Location= new Point(konumx, konumy);
                    Bitmap image = new Bitmap("C:Userspc1Desktoppngegg.png");
                    ahmet.SizeMode = PictureBoxSizeMode.Zoom;
                    ahmet.Image = (Image)image;
                    ahmet.Width = genişlik;
                    ahmet.Height = yükseklik;
                    Controls.Add(ahmet);
                    System.Threading.Thread.Sleep(10);

                }
            }
            catch
            {
               
                MessageBox.Show("Yanlış tanım girildi.", "Hata!", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }
    }
}

 

Kaynak

 

 

Yorumunuzu Ekleyin


Yükleniyor...
Yükleniyor...