İlginizi Çekebilir
  1. Ana Sayfa
  2. C Sharp
  3. C# Dinamik Button ve Dinamik Düzen

C# Dinamik Button ve Dinamik Düzen

Merhaba, C# Dinamik Button ve Dinamik Düzen dersi ile C# eğitim setime devam ediyorum. Bu dersimizde C# ile textbox'a girdiğimiz düzene göre dinamik buttonlar üreten ve yerleştiren bir uygulama yapacağız. Buna ek olarak iki görsel efekt ekleyeceğiz.

C# Dinamik Button ve Dinamik Düzen

Merhaba, C# Dinamik Button ve Dinamik Düzen dersi ile C# eğitim setime devam ediyorum. Bu dersimizde C# ile textbox’a girdiğimiz düzene göre dinamik buttonlar üreten ve yerleştiren bir uygulama yapacağız. Buna ek olarak iki görsel efekt ekleyeceğiz.

C# Dinamik Button ve Dinamik Düzen

C# dinamik button konusunda bir dersim zaten vardı ancak bu ders biraz daha farklı olacak. Textbox’tan girilen bir düzene göre buttonları bir panel içerisine ekleyeceğiz. Örnek vermek gerekirse, diyelim ki bir sinema salonu ya da bir otobüs koltuk düzenimiz olsun. Bu tarz belirli koltuk düzenine uyacak bir tasarımı otomatik olarak gerçekleştireceğiz.

Dinamik Nesneler ile ilgili derslerim.

  1. C# Dinamik Nesne Oluşturma ve Forma Ekleme
  2. C# Dinamik Form ve Nesneler Üretip Kullanmak

Tabi buna ek olarak, konu ile alakasız olsa da dinamik eklenen button nesneleri üzerinden görsel olarak iki işlem daha yapacağız. Uygulamanın çalışma şekli aşağıdaki videodaki gibidir.

 

C# Dinamik Button ve Dinamik Düzen

Şimdi formumuza 2 textbox, 3 button, 1 label, 2 radiobutton, 1 timer ve 1 panel ekleyelim. Form tasarımı aşağıdaki gibidir.

C# Dinamik Button ve Dinamik Düzen 2

Şimdi burada yapılacak işlem sol üst kısımdaki textbox’ta yer alan * ‘ların duruşuna göre panelde buttonlar otomatik yerleşecek.

Değişkenlerimiz,

     int i = 0, ii = 0, sayac = 0;
        Button btn;
 private void btn_olustur_Click(object sender, EventArgs e)
        {
            DuzenKur();
        }
        void DuzenKur()
        {
            int say = 0;
            panel1.Controls.Clear();
            int olcu = 38;
            for (int i = 0; i < txt_duzen.Lines.Count(); i++)// textbox satırları arasında
            {
                for (int j = 0; j < txt_duzen.Lines[i].Count(); j++) // bir satırdaki karakterler arasında
                {
                    string satir = txt_duzen.Lines[i]; // bir satırı aldık
                    if (satir[j] == '*') // satırdaki j index'ine denk gelen ifade * ise
                    {
                        Button nesne = new Button();
                        nesne.Name = "buton" + i;
                        nesne.Text = (++say).ToString();
                        nesne.BackColor = Color.Red;
                        nesne.Width = nesne.Height = 33;
                        nesne.Left = olcu * j;// butonun nerede duracağı
                        nesne.Top = olcu * i; // butonun nerede duracağı
                        panel1.Controls.Add(nesne);
                        nesne.Click += koltukSecildi;
                    }
                }
            }
        }

Button oluştur click eventi ve DuzenKur metodumuz…

Burada, Textbox satırları ve satırlardaki karakterler arasında döngülerimiz var. Satırdaki karakterler arasında dönerken karakter eğer * ise bir button ekleniyor. Button nesnesinin Left ve Top özelliklerini döngüler üzerinden aldığımız için * olmayan kısımlar boş bırakılmış oluyor. Yani aslında biz buttonların nerede duracaklarını söylüyoruz.

Button nesnesinin Left özelliğine ekleme yaparak satırda soldan nerede nerede duracağını, Top özelliğine ekleme yaparak yukarıdan ne kadar aşağıda duracağını belirliyoruz.

Burada button nesneleri 33X33 pikseldir. Bırakılan boşluklar ise 38 pikseldir. Bu da yan yana gelen button nesneleri arsında 5 piksellik boşluk bırakılacak anlamına geliyor.

Şimdi button nesnelerimizin click eventlerini ayarlayalım. Burada asıl amaç koltuk düzeni olduğundan buttona tıkladığımız rengini değiştirip, Rezerve edildiğini temsil edeceğiz.

       void koltukSecildi(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            if (btn.BackColor == Color.Red)
                btn.BackColor = Color.Aqua;
            else
                btn.BackColor = Color.Red;
        }

Bu metot ile tıklanan button nesnesinin arka plan rengini değiştiyoruz. Aslında projemiz burada bitiyor. Buradan sonrası öylesine yapılmış şeylerdir. 🙂 Videodaki gibi sırayla otomatik renk değiştirilmesini yapacağız.

Şimdi Renklendir ve Durdur button nesnelerimizin click eventlerini verelim.

       private void btn_renklendir_Click(object sender, EventArgs e)
        {
            i = 0;
            ii = panel1.Controls.Count - 1;
            sayac = 0;
            timer1.Interval = Convert.ToInt32(txt_salise.Text);
            timer1.Enabled = true;
        }
        private void btn_durdur_Click(object sender, EventArgs e)
        {
            i = 0;
            ii = panel1.Controls.Count - 1;
            sayac = 0;
            timer1.Interval = Convert.ToInt32(txt_salise.Text);
            timer1.Enabled = false;
            DuzenKur();
        }

Burada değişkenleri sıfırlayıp timer’in intervalini ayarlıyoruz.

İki işlemimiz var. Bir sıradan yakma iki bir sondan bir baştan yakma. Şimdi o metotları verelim.

        void BirbastanBirsondan()
        {
            try
            {
                btn = panel1.Controls[i] as Button;
                btn.PerformClick();
                i++;
            }
            catch (ArgumentOutOfRangeException)
            {
                i = 0;
            }

            try
            {
                btn = panel1.Controls[ii] as Button;
                btn.PerformClick();
                ii--;
            }
            catch (ArgumentOutOfRangeException)
            {

                ii = panel1.Controls.Count - 1; ;
            }
        }
        void Sıradan()
        {
            btn = panel1.Controls[i] as Button;
            btn.PerformClick();
            i++;
        }

BirbastanBirsondan() metodumuzda, i ve ii değişkenlerini kullanıyoruz. Panel’e eklenen kontrollerin hepsi button olduğundan yaptığımız atamada bir sorun yaşamıyoruz. Atamayı yapılan button’un performClick metodu ile kod ile butona tıklıyoruz. i değişkeni 0 dan başlayıp artıyor, ii değişkeni de eklenen button sayısından başlayıp azalıyor. Böylece bir sondan bir baştan buttonlara tıklayarak renklerini değiştiriyoruz.

Sıradan(), metodumuzda da ilk buttondan başlayarak sırayla buttonlara tıklıyoruz.

Şimdi  bu kodların çalışmasını sağlayan kısma geldik. Timer nesnesinin Tick eventine… Timer’in interval özelliğini 10 olarak ayarladığımzıdan olabileceği en hızlı şekilde buttonlara sıra ile tıklayacak.

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (radioButton1.Checked == true)
            {
                if (sayac < panel1.Controls.Count)
                {
                    BirbastanBirsondan();
                }
                else
                { sayac = 0; i = 0; ii = panel1.Controls.Count - 1; }
                sayac++;
            }
            if (radioButton2.Checked == true)
            {
                if (sayac < panel1.Controls.Count)
                {
                    Sıradan();
                }
                else
                { sayac = 0; i = 0; }
                sayac++;
            }

        }

Burada ek olarak, tıklanan button, panel’e eklenen control sayısına ulaştığında sıfırlanmasını ve baştan başlamasını istedik. Bu şekilde durmadan buttonların renkleri değişiyor.

Projenin tamamı bu kadardı. Aşağıda formdaki tüm kodları tek seferde veriyorum.

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

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


        int i = 0, ii = 0, sayac = 0;
        Button btn;
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void btn_olustur_Click(object sender, EventArgs e)
        {
            DuzenKur();
        }
        void DuzenKur()
        {
            int say = 0;
            panel1.Controls.Clear();
            int olcu = 38;
            for (int i = 0; i < txt_duzen.Lines.Count(); i++)// textbox satırları arasında
            {
                for (int j = 0; j < txt_duzen.Lines[i].Count(); j++) // bir satırdaki karakterler arasında
                {
                    string satir = txt_duzen.Lines[i]; // bir satırı aldık
                    if (satir[j] == '*') // satırdaki j index'ine denk gelen ifade * ise
                    {
                        Button nesne = new Button();
                        nesne.Name = "buton" + i;
                        nesne.Text = (++say).ToString();
                        nesne.BackColor = Color.Red;
                        nesne.Width = nesne.Height = 33;
                        nesne.Left = olcu * j;// butonun nerede duracağı
                        nesne.Top = olcu * i; // butonun nerede duracağı
                        panel1.Controls.Add(nesne);
                        nesne.Click += koltukSecildi;
                    }
                }
            }
        }
        void koltukSecildi(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            if (btn.BackColor == Color.Red)
                btn.BackColor = Color.Aqua;
            else
                btn.BackColor = Color.Red;
        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (radioButton1.Checked == true)
            {
                if (sayac < panel1.Controls.Count)
                {
                    BirbastanBirsondan();
                }
                else
                { sayac = 0; i = 0; ii = panel1.Controls.Count - 1; }
                sayac++;
            }
            if (radioButton2.Checked == true)
            {
                if (sayac < panel1.Controls.Count)
                {
                    Sıradan();
                }
                else
                { sayac = 0; i = 0; }
                sayac++;
            }

        }
        void BirbastanBirsondan()
        {
            try
            {
                btn = panel1.Controls[i] as Button;
                btn.PerformClick();
                i++;
            }
            catch (ArgumentOutOfRangeException)
            {
                i = 0;
            }

            try
            {
                btn = panel1.Controls[ii] as Button;
                btn.PerformClick();
                ii--;
            }
            catch (ArgumentOutOfRangeException)
            {

                ii = panel1.Controls.Count - 1; ;
            }
        }
        void Sıradan()
        {
            btn = panel1.Controls[i] as Button;
            btn.PerformClick();
            i++;
        }

   

        private void btn_renklendir_Click(object sender, EventArgs e)
        {
            i = 0;
            ii = panel1.Controls.Count - 1;
            sayac = 0;
            timer1.Interval = Convert.ToInt32(txt_salise.Text);
            timer1.Enabled = true;
        }
        private void btn_durdur_Click(object sender, EventArgs e)
        {
            i = 0;
            ii = panel1.Controls.Count - 1;
            sayac = 0;
            timer1.Interval = Convert.ToInt32(txt_salise.Text);
            timer1.Enabled = false;
            DuzenKur();
        }
    }
}

Hepsi bu kadardı arkadaşlar.


C# Dinamik Button ve Dinamik Düzen  yazımda bu kadar arkadaşlar.

Bana destek olmak isterseniz, iletişim sayfamda verdiğim sosyal medya hesaplarımı takip edebilirsiniz.

C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız. Derslerime özel olarak hazırladığım Github Projeme bu bağlantıdan ulaşabilirsiniz…  Bu projeyi Drive’a yükledim. Bağlantıya tıklayarak indirebilirsiniz.

Bu yazı, sitemdeki 437. yazıdır…

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

Yorum Yap

Yazar Hakkında

Liseden, Ağ Sistemleri ve Yönetimi bölümünden mezun oldum. Üniversiteden (2 yıllık), Bilgisayar Programcılığı bölümünden mezun oldum. Şuanda da AÖF, Yönetim Bilişim Sistemleri bölümünde okumaktayım. Uzmanlık alanlarım; Windows Sistemleri, HTML, CSS, C# ve SQL’dir. Hobi olarak uğraştığım genel konular, Photoshop, After Affects, Corel Draw’dır.Film, YABANCI dizi, Anime izlemeyi ve Manga okumayı severim. Arkadaşlarımla yürüyüş yapmayı ve grup olarak aktivitelere gitmeyi severim. Geri kalan zamanlarımın tümü bilgisayar karşısında geçer.

Yorum Yap