Dinamik Araç Oluşturma

Bazı projelerde çok fazla araca ihtiyacımız olabilir, özellikle de bu rezervasyonlar sistemlerinde daha sık kullanılan yöntemdir. Örneğin bir uçakta koltukları butonla veya picturebox ile göstermek istiyorsunuz diyelim. Örnek boeing 777 serisinde 300 ila 400 tane koltuk var. Siz her bir koltuk için buton veya picturebox eklerseniz program geri planda kendi yazdığı kodlar içerisinde her bir koltuk için ayrıca araç kodlarını designer kısmına ekler. Bu da performans açısından istenilen bir durum değildir. O yüzden böyle durumlarda araçları kod ile dinamik bir şekilde oluşturmak daha faydalıdır. Hatta mesela uçak tipine göre değişen koltuk sayılarını ele aldığımızda bunları dinamik bir şekilde oluşturmak tabii ki daha avantajlı olacaktır.

Şimdi şöyle bir örnek yapalım; form projemde ben formuma herhangi bir öğe eklemeyeceğim. Formun load olayında kodlarımı yazacağım, yani form load olduğunda araçlarım otomatik oluşacak. 3 tane aracın oluşmasını sağlayalım. Bir label, bir adet textbox, bir adette buton kontrolünü kodlar ile oluşturalım.

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 DinamikAracOlusturma
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //Buton oluşturmak için Button sınıfından nesne türettim.
            Button btn = new Button();

            //Butona konum belirlemek için önce Point sınıfından nesne türetiyorum. Bu nesneme X ve Y koordinatlarındaki yer bilgisini atıyorum. Daha sonra nesnemde Location metodu ile form üzerindeki konumunun atamasını kontrolüm için yapıyorum.
            Point btnKonum = new Point(30, 10);
            btn.Location = btnKonum;

            //Buton kontrolü diğer özelliklerden Name, Text, Arka Plan Rengi, Yükseklik ve genişlik atamalarını yapıyorum.
            btn.Name = "Button1";
            btn.Text = "Buton";
            btn.BackColor = Color.Yellow;
            btn.Height = 60;
            btn.Width = 60;

            //Buton kontrolünüm formuma eklenmesi için this.controls.add kullanıyorum.
            this.Controls.Add(btn);

            //Textbox oluşturmak için Textbox sınıfından nesne türettim.
            TextBox txt = new TextBox();

            //Textboxa konum belirlemek için önce Point sınıfından nesne türetiyorum. Bu nesneme X ve Y koordinatlarındaki yer bilgisini atıyorum. Daha sonra nesnemde Location metodu ile form üzerindeki konumunun atamasını kontrolüm için yapıyorum.
            Point txtKonum = new Point(120, 10);
            txt.Location = txtKonum;

            //TextBox kontrolü diğer özelliklerden Name, Arka Plan Rengi, Yükseklik ve genişlik atamalarını yapıyorum.
            txt.Name = "TextBox1";
            txt.BackColor = Color.Red;
            txt.Height = 60;
            txt.Width = 60;

            //Textbox kontrolünüm formuma eklenmesi için this.controls.add kullanıyorum.
            this.Controls.Add(txt);

            //Label oluşturmak için Label sınıfından nesne türettim.
            Label lbl = new Label();

            //Labela konum belirlemek için önce Point sınıfından nesne türetiyorum. Bu nesneme X ve Y koordinatlarındaki yer bilgisini atıyorum. Daha sonra nesnemde Location metodu ile form üzerindeki konumunun atamasını kontrolüm için yapıyorum.
            Point lblKonum = new Point(220, 10);
            lbl.Location = lblKonum;

            //Label kontrolü diğer özelliklerden Name, Text, Arka Plan Rengi, Yükseklik ve genişlik atamalarını yapıyorum.
            lbl.Name = "Label1";
            lbl.Text = "Label";
            lbl.BackColor = Color.Aqua;
            lbl.Height = 60;
            lbl.Width = 60;

            //Label kontrolünüm formuma eklenmesi için this.controls.add kullanıyorum.
            this.Controls.Add(lbl);

            
        }
    }
}


Burada görüleceği üzere her bir .net kontrolü için öncelikle o kontrolün classından yeni bir neste türetiyorum. Daha sonra bu kontrolümün nereye konumlanacağını belirlemek için Point classından bir nesne türetiyorum. Burada ayrıca X ve Y koordinatlarındaki yerini belirtiyorum.

Kontrolün Location metodu ile konumunun atamasını yapıyorum.

Daha sonra kontroller için bir takım özellik atamalarını yaptım. İsim, görülecek yazısı, boyu, genişliği, arka plan rengi gibi.

En sonda da this.Controls.Add ile formuma eklenmelerini sağladım.

Uçak koltuk oluşturma:

Şimdi son bir örnekle bitirelim, bu sefer formuma buton ekleyeceğim. Ama döngü ile bu işlemi yapmak istiyorum. Şöyle bir şey düşünelim, bir uçak için rezervasyon programımız var. Bu programda uçak tipine göre koltuklar program tarafından dinamik olarak oluşuruluyor. Örneğin bizim seçtiğimiz uçak tipi A320’ye göre benim firmamın 29 sıra koltuğu olsun, her sırada 6 koltuk, 3’erli gruplar halinde oluşturulacak. Bunları dinamil olarak oluşturmak istiyor isem yapacağım işlem tamamen For döngüsünü kullanmak.

 İç içe for vs kullanmadan düz mantıkla yapalım ki konu anlaşılsın. Bir sırada 6 tane kod olacağına göre 6 tane for döngüsü yapacağım. Her döngümün içerisinde Button sınıfından yeni nesne türetip butonuma özellikleirni belirteceğim. Burada bir diğer hususta butonlarımın konumu tabi. Bunun için de Point sınıfından nesne türetip X ve Y koordinatlarını atacağım. 1. Sırayı oluşturduktan sonra butonumun genişlik ölçüsünü dikkate alarak, 2. Sıra içinde tanımladığım konum bilgisinin X koordinatını ona göre değiştireceğim. Yine 3. Sıra ve sonraki sıralarda bunu dikkate alacağım. Aşağıya doğru sıralama yapacağım için Y koordinatı sıra grup başlarında değişmeyecek. Birde malum uçak koltuk numaraları 1A, 1B, 1C, 1D, 1E, 1F gibi sıra numaları alır. Burada rakamsal değeri döngümden alacağım, harf değerini ise bu rakam değerinin yanına ekleyeceğim. Zaten aşağıda kodları görünce daha net anlayacaksınız. Hadi kodlayalım;

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 DinamikAracOlusturma
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //1. sıra için döngüm
            for (int i=1; i<30; i++)
            {
                //Buton sınıfımdan nesne türettim. 
                Button btn = new Button();

                //Point sınıfından nesne türetip, X ve Y koordinatlarının değerlerini verdim.
                Point konum = new Point(100, i * 30);

                //X ve Y koordinatlarını butona aktardım.
                btn.Location = konum;

                //Butona ilişkin diğer özelliklerimi atadım.
                btn.Text = i.ToString() + "A";
                btn.Height = 30;
                btn.Width = 30;
                btn.Font = new Font(btn.Font.FontFamily, 6);

                //Butonu forma ekledim.
                this.Controls.Add(btn);

            }

            //2.sıra döngüsü
            for (int i = 1; i < 30; i++)
            {
                Button btn = new Button();
                Point konum = new Point(131, i * 30);
                btn.Location = konum;
                btn.Text = i.ToString() + "B";
                btn.Height = 30;
                btn.Width = 30;
                btn.Font = new Font(btn.Font.FontFamily, 6);
                this.Controls.Add(btn);

            }


            //3. sıra döngüsü
            for (int i = 1; i < 30; i++)
            {
                Button btn = new Button();
                Point konum = new Point(162, i * 30);
                btn.Location = konum;
                btn.Text = i.ToString() + "C";
                btn.Height = 30;
                btn.Width = 30;
                btn.Font = new Font(btn.Font.FontFamily, 6);
                this.Controls.Add(btn);

            }


            //4. sıra döngüsü
            for (int i = 1; i < 30; i++)
            {
                Button btn = new Button();
                Point konum = new Point(233, i * 30);
                btn.Location = konum;
                btn.Text = i.ToString() + "D";
                btn.Height = 30;
                btn.Width = 30;
                btn.Font = new Font(btn.Font.FontFamily, 6);
                this.Controls.Add(btn);

            }

            //5. sıra döngüsü
            for (int i = 1; i < 30; i++)
            {
                Button btn = new Button();
                Point konum = new Point(264, i * 30);
                btn.Location = konum;
                btn.Text = i.ToString() + "E";
                btn.Height = 30;
                btn.Width = 30;
                btn.Font = new Font(btn.Font.FontFamily, 6);
                this.Controls.Add(btn);

            }

            //6. sıra döngüsü
            for (int i = 1; i < 30; i++)
            {
                Button btn = new Button();
                Point konum = new Point(295, i * 30);
                btn.Location = konum;
                btn.Text = i.ToString() + "F";
                btn.Height = 30;
                btn.Width = 30;
                btn.Font = new Font(btn.Font.FontFamily, 6);
                this.Controls.Add(btn);

            }

        }
    }
}


Dinamik Araç Oluşturma

Şimdilik bu kadar 🙂

2 Yorumlar

  1. Selam Aleykum.Yazilar icin cok tesekkur ederim.Gordugum en iyi bloglardan biri.Azerbeycandan sevgiler .

  2. Aleyküm selam. Rica ederim, sizlere faydası oldu ise ne mutlu bana. Türkiye’den de sevgiler, hürmetler.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir