C# Dinamik Form oluşturma

Kruvazör

Yazılım Ekibi Lideri
28 Mar 2020
1,724
2,542
Wrong Side Of Heaven
Herkese merhaba arkadaşlar ben Kruvazör
Bugün sizlerle C# ile dinamik form oluşturma hakkında konuşacağız.

C# programlama dilinde dinamik form oluşturma, uygulamanızın çalışma zamanında kullanıcı arayüzünü esnek bir şekilde yönetmenizi sağlar.
Öncelikle, Form sınıfından bir nesne oluşturulur ve ardından bu nesne üzerinde dinamik olarak kontrol eklemek için gerekli nesneler (örneğin buttonlar, labeller vs...) oluşturulur ve konumları belirlenir. nesnelerin özellikleri ve olayları da dinamik olarak ayarlanabilir. Bu yaklaşım uygulamanın ihtiyaçlarına uygun esnek ve özelleştirilebilir kullanıcı formları oluşturmak için kullanılır.

Örneğin yazacağınız bir masaüstü otomasyonda gelişebilecek müşteri isteklerine karşın dinamik bir form sunmak işlerinizi epey kolaylaştırır.


Genel olarak konuyu kavradığımıza göre örnek yapalım.
Senaryomuz şu şekilde:
bir firma o gün teslim aldığı ürünleri tek tek not alıyor ve dışarıya aktarmak istiyor.
Ama firmanın aldığı ürün sayısı hiç bir zaman belli olmuyor.
Yani bir gün 5 bir gün 5000 ürün gelebiliyor.
Dosyaların çıktısını almak için xml kullandım.


Formu tasarlamaya başlayalım:

1 label
1 textbox
1 button
1 flowlayoutpanel

q0wppm0.png

Global alanda dinamik olarak oluşturulacak label ve txtboxların listesini tutmak adına listelerimizi tanımlayalım
C#:
 private List<TextBox> textBoxListesi = new List<TextBox>();
 private List<Label> labelListesi = new List<Label>();
Ardından button click eventine gelip kodlarımızı yazalım
C#:
private void button1_Click(object sender, EventArgs e)
{
    // Her bir TextBox ve Label için varsayılan uzunluk
    int satirUzunlugu = 700;
    int kontrolGenislik = satirUzunlugu / 5;

    // Form genişliği, bir kenarda boşluk bırakmak için
    int formGenislik = satirUzunlugu + 20;

    // TextBox sayısını TextBox'tan al
    int textBoxSayisi = Convert.ToInt16(textBox1.Text);

    // FlowLayoutPanel'i temizle
    flowLayoutPanel1.Controls.Clear();

    // TextBox ve Label listelerini temizle
    textBoxListesi.Clear();
    labelListesi.Clear();

    // Kalan TextBox sayısını takip etmek için değişken
    int kalanTextBoxSayisi = textBoxSayisi;

    // TextBox ve Label'ları oluştur ve FlowLayoutPanel'e ekle
    for (int i = 0; i < textBoxSayisi; i++)
    {
        // Label oluştur
        Label urunLabel = new Label();
        urunLabel.Name = "lblUrun" + i.ToString();
        urunLabel.Text = "Ürün" + (i + 1).ToString() + ":";

        // TextBox oluştur 
       // buralarda textbox ve labellara özellikler penceresinden verdiğimiz özellikleri kod olarak veriyoruz.
        TextBox yeniTextBox = new TextBox();
        yeniTextBox.Name = "txtBox" + i.ToString();
        yeniTextBox.Text = "";
        yeniTextBox.Width = kontrolGenislik - 10;
        yeniTextBox.Height = 20;

        // FlowLayoutPanel'e Label ve TextBox'i ekle
        flowLayoutPanel1.Controls.Add(urunLabel);
        flowLayoutPanel1.Controls.Add(yeniTextBox);

        // Label ve TextBox'i ilgili listelere ekle
        textBoxListesi.Add(yeniTextBox);
        labelListesi.Add(urunLabel);

        // Kalan TextBox sayısını azalt
        kalanTextBoxSayisi--;
    }

    // Kaydet Button'u oluştur ve FlowLayoutPanel'e ekle bu button ile xml işlemi yapacağız
    Button kaydetButton = new Button();
    kaydetButton.Name = "btnKaydet";
    kaydetButton.Text = "Kaydet";
    kaydetButton.Width = 100;
    kaydetButton.Height = 30;
    kaydetButton.Click += new EventHandler(KaydetButtonClick);
    flowLayoutPanel1.Controls.Add(kaydetButton);


    // FlowLayoutPanel'in AutoScroll özelliğini etkinleştir
    flowLayoutPanel1.AutoScroll = true;
}
Kaydet buttonunun click eventine gelelim
C#:
  private void KaydetButtonClick(object sender, EventArgs e)
  {
      // Verileri XML'e aktar
      XmlDocument xmlDocument = new XmlDocument();
      XmlElement rootElement = xmlDocument.CreateElement("TextBoxData");

      for (int i = 0; i < textBoxListesi.Count; i++)
      {


        
          XmlElement textBoxElement = xmlDocument.CreateElement("TextBox");
          textBoxElement.SetAttribute("Name", textBoxListesi[i].Name);
          textBoxElement.SetAttribute("Text", textBoxListesi[i].Text);
          textBoxElement.SetAttribute("UrunAdi", labelListesi[i].Text.Replace(":", "")); // ':' karakterini kaldır

          rootElement.AppendChild(textBoxElement);
      }

      xmlDocument.AppendChild(rootElement);

      // XML belgesini proje klasörüne kaydet
      string xmlDosyaYolu = System.IO.Path.Combine(Application.StartupPath, "TextBoxData.xml");
      xmlDocument.Save(xmlDosyaYolu);

      MessageBox.Show("Veriler XML dosyasına aktarıldı. Dosya yolu: " + xmlDosyaYolu);
  }
n6w7u3a.jpg

6mzaq2o.jpg




Kodların tamamı:
C#:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Xml;

namespace DynamicFormDesign
{
    public partial class Form1 : Form
    {
        private List<TextBox> textBoxListesi = new List<TextBox>();
        private List<Label> labelListesi = new List<Label>();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Her bir TextBox ve Label için varsayılan uzunluk
            int satirUzunlugu = 700;
            int kontrolGenislik = satirUzunlugu / 5;

            // Form genişliği, bir kenarda boşluk bırakmak için
            int formGenislik = satirUzunlugu + 20;

            // TextBox sayısını TextBox'tan al
            int textBoxSayisi = Convert.ToInt16(textBox1.Text);

            // FlowLayoutPanel'i temizle
            flowLayoutPanel1.Controls.Clear();

            // TextBox ve Label listelerini temizle
            textBoxListesi.Clear();
            labelListesi.Clear();

            // Kalan TextBox sayısını takip etmek için değişken
            int kalanTextBoxSayisi = textBoxSayisi;

            // TextBox ve Label'ları oluştur ve FlowLayoutPanel'e ekle
            for (int i = 0; i < textBoxSayisi; i++)
            {
                // Label oluştur
                Label urunLabel = new Label();
                urunLabel.Name = "lblUrun" + i.ToString();
                urunLabel.Text = "Ürün" + (i + 1).ToString() + ":";

                // TextBox oluştur
                TextBox yeniTextBox = new TextBox();
                yeniTextBox.Name = "txtBox" + i.ToString();
                yeniTextBox.Text = "";
                yeniTextBox.Width = kontrolGenislik - 10;
                yeniTextBox.Height = 20;

                // FlowLayoutPanel'e Label ve TextBox'i ekle
                flowLayoutPanel1.Controls.Add(urunLabel);
                flowLayoutPanel1.Controls.Add(yeniTextBox);

                // Label ve TextBox'i ilgili listelere ekle
                textBoxListesi.Add(yeniTextBox);
                labelListesi.Add(urunLabel);

                // Kalan TextBox sayısını azalt
                kalanTextBoxSayisi--;
            }

            // Kaydet Button'u oluştur ve FlowLayoutPanel'e ekle
            Button kaydetButton = new Button();
            kaydetButton.Name = "btnKaydet";
            kaydetButton.Text = "Kaydet";
            kaydetButton.Width = 100;
            kaydetButton.Height = 30;
            kaydetButton.Click += new EventHandler(KaydetButtonClick);
            flowLayoutPanel1.Controls.Add(kaydetButton);

    

            // FlowLayoutPanel'in AutoScroll özelliğini etkinleştir
            flowLayoutPanel1.AutoScroll = true;
        }


        private void KaydetButtonClick(object sender, EventArgs e)
        {
            // Verileri XML'e aktar
            XmlDocument xmlDocument = new XmlDocument();
            XmlElement rootElement = xmlDocument.CreateElement("TextBoxData");

            for (int i = 0; i < textBoxListesi.Count; i++)
            {


              
                XmlElement textBoxElement = xmlDocument.CreateElement("TextBox");
                textBoxElement.SetAttribute("Name", textBoxListesi[i].Name);
                textBoxElement.SetAttribute("Text", textBoxListesi[i].Text);
                textBoxElement.SetAttribute("UrunAdi", labelListesi[i].Text.Replace(":", "")); // ':' karakterini kaldır

                rootElement.AppendChild(textBoxElement);
            }

            xmlDocument.AppendChild(rootElement);

            // XML belgesini proje klasörüne kaydet
            string xmlDosyaYolu = System.IO.Path.Combine(Application.StartupPath, "TextBoxData.xml");
            xmlDocument.Save(xmlDosyaYolu);

            MessageBox.Show("Veriler XML dosyasına aktarıldı. Dosya yolu: " + xmlDosyaYolu);
        }
    }
}

OKUDUĞUNUZ İÇİN TEŞEKKÜRLER
 

teux

Katılımcı Üye
23 Ocak 2023
959
1,329
Herkese merhaba arkadaşlar ben Kruvazör
Bugün sizlerle C# ile dinamik form oluşturma hakkında konuşacağız.

C# programlama dilinde dinamik form oluşturma, uygulamanızın çalışma zamanında kullanıcı arayüzünü esnek bir şekilde yönetmenizi sağlar.
Öncelikle, Form sınıfından bir nesne oluşturulur ve ardından bu nesne üzerinde dinamik olarak kontrol eklemek için gerekli nesneler (örneğin buttonlar, labeller vs...) oluşturulur ve konumları belirlenir. nesnelerin özellikleri ve olayları da dinamik olarak ayarlanabilir. Bu yaklaşım uygulamanın ihtiyaçlarına uygun esnek ve özelleştirilebilir kullanıcı formları oluşturmak için kullanılır.

Örneğin yazacağınız bir masaüstü otomasyonda gelişebilecek müşteri isteklerine karşın dinamik bir form sunmak işlerinizi epey kolaylaştırır.


Genel olarak konuyu kavradığımıza göre örnek yapalım.
Senaryomuz şu şekilde:
bir firma o gün teslim aldığı ürünleri tek tek not alıyor ve dışarıya aktarmak istiyor.
Ama firmanın aldığı ürün sayısı hiç bir zaman belli olmuyor.
Yani bir gün 5 bir gün 5000 ürün gelebiliyor.
Dosyaların çıktısını almak için xml kullandım.


Formu tasarlamaya başlayalım:

1 label
1 textbox
1 button
1 flowlayoutpanel

q0wppm0.png

Global alanda dinamik olarak oluşturulacak label ve txtboxların listesini tutmak adına listelerimizi tanımlayalım
C#:
 private List<TextBox> textBoxListesi = new List<TextBox>();
private List<Label> labelListesi = new List<Label>();
Ardından button click eventine gelip kodlarımızı yazalım
C#:
private void button1_Click(object sender, EventArgs e)
{
    // Her bir TextBox ve Label için varsayılan uzunluk
    int satirUzunlugu = 700;
    int kontrolGenislik = satirUzunlugu / 5;

    // Form genişliği, bir kenarda boşluk bırakmak için
    int formGenislik = satirUzunlugu + 20;

    // TextBox sayısını TextBox'tan al
    int textBoxSayisi = Convert.ToInt16(textBox1.Text);

    // FlowLayoutPanel'i temizle
    flowLayoutPanel1.Controls.Clear();

    // TextBox ve Label listelerini temizle
    textBoxListesi.Clear();
    labelListesi.Clear();

    // Kalan TextBox sayısını takip etmek için değişken
    int kalanTextBoxSayisi = textBoxSayisi;

    // TextBox ve Label'ları oluştur ve FlowLayoutPanel'e ekle
    for (int i = 0; i < textBoxSayisi; i++)
    {
        // Label oluştur
        Label urunLabel = new Label();
        urunLabel.Name = "lblUrun" + i.ToString();
        urunLabel.Text = "Ürün" + (i + 1).ToString() + ":";

        // TextBox oluştur
       // buralarda textbox ve labellara özellikler penceresinden verdiğimiz özellikleri kod olarak veriyoruz.
        TextBox yeniTextBox = new TextBox();
        yeniTextBox.Name = "txtBox" + i.ToString();
        yeniTextBox.Text = "";
        yeniTextBox.Width = kontrolGenislik - 10;
        yeniTextBox.Height = 20;

        // FlowLayoutPanel'e Label ve TextBox'i ekle
        flowLayoutPanel1.Controls.Add(urunLabel);
        flowLayoutPanel1.Controls.Add(yeniTextBox);

        // Label ve TextBox'i ilgili listelere ekle
        textBoxListesi.Add(yeniTextBox);
        labelListesi.Add(urunLabel);

        // Kalan TextBox sayısını azalt
        kalanTextBoxSayisi--;
    }

    // Kaydet Button'u oluştur ve FlowLayoutPanel'e ekle bu button ile xml işlemi yapacağız
    Button kaydetButton = new Button();
    kaydetButton.Name = "btnKaydet";
    kaydetButton.Text = "Kaydet";
    kaydetButton.Width = 100;
    kaydetButton.Height = 30;
    kaydetButton.Click += new EventHandler(KaydetButtonClick);
    flowLayoutPanel1.Controls.Add(kaydetButton);


    // FlowLayoutPanel'in AutoScroll özelliğini etkinleştir
    flowLayoutPanel1.AutoScroll = true;
}
Kaydet buttonunun click eventine gelelim
C#:
  private void KaydetButtonClick(object sender, EventArgs e)
  {
      // Verileri XML'e aktar
      XmlDocument xmlDocument = new XmlDocument();
      XmlElement rootElement = xmlDocument.CreateElement("TextBoxData");

      for (int i = 0; i < textBoxListesi.Count; i++)
      {


       
          XmlElement textBoxElement = xmlDocument.CreateElement("TextBox");
          textBoxElement.SetAttribute("Name", textBoxListesi[i].Name);
          textBoxElement.SetAttribute("Text", textBoxListesi[i].Text);
          textBoxElement.SetAttribute("UrunAdi", labelListesi[i].Text.Replace(":", "")); // ':' karakterini kaldır

          rootElement.AppendChild(textBoxElement);
      }

      xmlDocument.AppendChild(rootElement);

      // XML belgesini proje klasörüne kaydet
      string xmlDosyaYolu = System.IO.Path.Combine(Application.StartupPath, "TextBoxData.xml");
      xmlDocument.Save(xmlDosyaYolu);

      MessageBox.Show("Veriler XML dosyasına aktarıldı. Dosya yolu: " + xmlDosyaYolu);
  }
n6w7u3a.jpg

6mzaq2o.jpg




Kodların tamamı:
C#:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Xml;

namespace DynamicFormDesign
{
    public partial class Form1 : Form
    {
        private List<TextBox> textBoxListesi = new List<TextBox>();
        private List<Label> labelListesi = new List<Label>();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Her bir TextBox ve Label için varsayılan uzunluk
            int satirUzunlugu = 700;
            int kontrolGenislik = satirUzunlugu / 5;

            // Form genişliği, bir kenarda boşluk bırakmak için
            int formGenislik = satirUzunlugu + 20;

            // TextBox sayısını TextBox'tan al
            int textBoxSayisi = Convert.ToInt16(textBox1.Text);

            // FlowLayoutPanel'i temizle
            flowLayoutPanel1.Controls.Clear();

            // TextBox ve Label listelerini temizle
            textBoxListesi.Clear();
            labelListesi.Clear();

            // Kalan TextBox sayısını takip etmek için değişken
            int kalanTextBoxSayisi = textBoxSayisi;

            // TextBox ve Label'ları oluştur ve FlowLayoutPanel'e ekle
            for (int i = 0; i < textBoxSayisi; i++)
            {
                // Label oluştur
                Label urunLabel = new Label();
                urunLabel.Name = "lblUrun" + i.ToString();
                urunLabel.Text = "Ürün" + (i + 1).ToString() + ":";

                // TextBox oluştur
                TextBox yeniTextBox = new TextBox();
                yeniTextBox.Name = "txtBox" + i.ToString();
                yeniTextBox.Text = "";
                yeniTextBox.Width = kontrolGenislik - 10;
                yeniTextBox.Height = 20;

                // FlowLayoutPanel'e Label ve TextBox'i ekle
                flowLayoutPanel1.Controls.Add(urunLabel);
                flowLayoutPanel1.Controls.Add(yeniTextBox);

                // Label ve TextBox'i ilgili listelere ekle
                textBoxListesi.Add(yeniTextBox);
                labelListesi.Add(urunLabel);

                // Kalan TextBox sayısını azalt
                kalanTextBoxSayisi--;
            }

            // Kaydet Button'u oluştur ve FlowLayoutPanel'e ekle
            Button kaydetButton = new Button();
            kaydetButton.Name = "btnKaydet";
            kaydetButton.Text = "Kaydet";
            kaydetButton.Width = 100;
            kaydetButton.Height = 30;
            kaydetButton.Click += new EventHandler(KaydetButtonClick);
            flowLayoutPanel1.Controls.Add(kaydetButton);

   

            // FlowLayoutPanel'in AutoScroll özelliğini etkinleştir
            flowLayoutPanel1.AutoScroll = true;
        }


        private void KaydetButtonClick(object sender, EventArgs e)
        {
            // Verileri XML'e aktar
            XmlDocument xmlDocument = new XmlDocument();
            XmlElement rootElement = xmlDocument.CreateElement("TextBoxData");

            for (int i = 0; i < textBoxListesi.Count; i++)
            {


             
                XmlElement textBoxElement = xmlDocument.CreateElement("TextBox");
                textBoxElement.SetAttribute("Name", textBoxListesi[i].Name);
                textBoxElement.SetAttribute("Text", textBoxListesi[i].Text);
                textBoxElement.SetAttribute("UrunAdi", labelListesi[i].Text.Replace(":", "")); // ':' karakterini kaldır

                rootElement.AppendChild(textBoxElement);
            }

            xmlDocument.AppendChild(rootElement);

            // XML belgesini proje klasörüne kaydet
            string xmlDosyaYolu = System.IO.Path.Combine(Application.StartupPath, "TextBoxData.xml");
            xmlDocument.Save(xmlDosyaYolu);

            MessageBox.Show("Veriler XML dosyasına aktarıldı. Dosya yolu: " + xmlDosyaYolu);
        }
    }
}

OKUDUĞUNUZ İÇİN TEŞEKKÜRLER
Elinize sağlık değişken ürün adları çok hoşuma gitti. :D
 

Kruvazör

Yazılım Ekibi Lideri
28 Mar 2020
1,724
2,542
Wrong Side Of Heaven
Herkese merhaba arkadaşlar ben Kruvazör
Bugün sizlerle C# ile dinamik form oluşturma hakkında konuşacağız.

C# programlama dilinde dinamik form oluşturma, uygulamanızın çalışma zamanında kullanıcı arayüzünü esnek bir şekilde yönetmenizi sağlar.
Öncelikle, Form sınıfından bir nesne oluşturulur ve ardından bu nesne üzerinde dinamik olarak kontrol eklemek için gerekli nesneler (örneğin buttonlar, labeller vs...) oluşturulur ve konumları belirlenir. nesnelerin özellikleri ve olayları da dinamik olarak ayarlanabilir. Bu yaklaşım uygulamanın ihtiyaçlarına uygun esnek ve özelleştirilebilir kullanıcı formları oluşturmak için kullanılır.

Örneğin yazacağınız bir masaüstü otomasyonda gelişebilecek müşteri isteklerine karşın dinamik bir form sunmak işlerinizi epey kolaylaştırır.


Genel olarak konuyu kavradığımıza göre örnek yapalım.
Senaryomuz şu şekilde:
bir firma o gün teslim aldığı ürünleri tek tek not alıyor ve dışarıya aktarmak istiyor.
Ama firmanın aldığı ürün sayısı hiç bir zaman belli olmuyor.
Yani bir gün 5 bir gün 5000 ürün gelebiliyor.
Dosyaların çıktısını almak için xml kullandım.


Formu tasarlamaya başlayalım:

1 label
1 textbox
1 button
1 flowlayoutpanel

q0wppm0.png

Global alanda dinamik olarak oluşturulacak label ve txtboxların listesini tutmak adına listelerimizi tanımlayalım
C#:
 private List<TextBox> textBoxListesi = new List<TextBox>();
private List<Label> labelListesi = new List<Label>();
Ardından button click eventine gelip kodlarımızı yazalım
C#:
private void button1_Click(object sender, EventArgs e)
{
    // Her bir TextBox ve Label için varsayılan uzunluk
    int satirUzunlugu = 700;
    int kontrolGenislik = satirUzunlugu / 5;

    // Form genişliği, bir kenarda boşluk bırakmak için
    int formGenislik = satirUzunlugu + 20;

    // TextBox sayısını TextBox'tan al
    int textBoxSayisi = Convert.ToInt16(textBox1.Text);

    // FlowLayoutPanel'i temizle
    flowLayoutPanel1.Controls.Clear();

    // TextBox ve Label listelerini temizle
    textBoxListesi.Clear();
    labelListesi.Clear();

    // Kalan TextBox sayısını takip etmek için değişken
    int kalanTextBoxSayisi = textBoxSayisi;

    // TextBox ve Label'ları oluştur ve FlowLayoutPanel'e ekle
    for (int i = 0; i < textBoxSayisi; i++)
    {
        // Label oluştur
        Label urunLabel = new Label();
        urunLabel.Name = "lblUrun" + i.ToString();
        urunLabel.Text = "Ürün" + (i + 1).ToString() + ":";

        // TextBox oluştur
       // buralarda textbox ve labellara özellikler penceresinden verdiğimiz özellikleri kod olarak veriyoruz.
        TextBox yeniTextBox = new TextBox();
        yeniTextBox.Name = "txtBox" + i.ToString();
        yeniTextBox.Text = "";
        yeniTextBox.Width = kontrolGenislik - 10;
        yeniTextBox.Height = 20;

        // FlowLayoutPanel'e Label ve TextBox'i ekle
        flowLayoutPanel1.Controls.Add(urunLabel);
        flowLayoutPanel1.Controls.Add(yeniTextBox);

        // Label ve TextBox'i ilgili listelere ekle
        textBoxListesi.Add(yeniTextBox);
        labelListesi.Add(urunLabel);

        // Kalan TextBox sayısını azalt
        kalanTextBoxSayisi--;
    }

    // Kaydet Button'u oluştur ve FlowLayoutPanel'e ekle bu button ile xml işlemi yapacağız
    Button kaydetButton = new Button();
    kaydetButton.Name = "btnKaydet";
    kaydetButton.Text = "Kaydet";
    kaydetButton.Width = 100;
    kaydetButton.Height = 30;
    kaydetButton.Click += new EventHandler(KaydetButtonClick);
    flowLayoutPanel1.Controls.Add(kaydetButton);


    // FlowLayoutPanel'in AutoScroll özelliğini etkinleştir
    flowLayoutPanel1.AutoScroll = true;
}
Kaydet buttonunun click eventine gelelim
C#:
  private void KaydetButtonClick(object sender, EventArgs e)
  {
      // Verileri XML'e aktar
      XmlDocument xmlDocument = new XmlDocument();
      XmlElement rootElement = xmlDocument.CreateElement("TextBoxData");

      for (int i = 0; i < textBoxListesi.Count; i++)
      {


       
          XmlElement textBoxElement = xmlDocument.CreateElement("TextBox");
          textBoxElement.SetAttribute("Name", textBoxListesi[i].Name);
          textBoxElement.SetAttribute("Text", textBoxListesi[i].Text);
          textBoxElement.SetAttribute("UrunAdi", labelListesi[i].Text.Replace(":", "")); // ':' karakterini kaldır

          rootElement.AppendChild(textBoxElement);
      }

      xmlDocument.AppendChild(rootElement);

      // XML belgesini proje klasörüne kaydet
      string xmlDosyaYolu = System.IO.Path.Combine(Application.StartupPath, "TextBoxData.xml");
      xmlDocument.Save(xmlDosyaYolu);

      MessageBox.Show("Veriler XML dosyasına aktarıldı. Dosya yolu: " + xmlDosyaYolu);
  }
n6w7u3a.jpg

6mzaq2o.jpg




Kodların tamamı:
C#:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Xml;

namespace DynamicFormDesign
{
    public partial class Form1 : Form
    {
        private List<TextBox> textBoxListesi = new List<TextBox>();
        private List<Label> labelListesi = new List<Label>();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Her bir TextBox ve Label için varsayılan uzunluk
            int satirUzunlugu = 700;
            int kontrolGenislik = satirUzunlugu / 5;

            // Form genişliği, bir kenarda boşluk bırakmak için
            int formGenislik = satirUzunlugu + 20;

            // TextBox sayısını TextBox'tan al
            int textBoxSayisi = Convert.ToInt16(textBox1.Text);

            // FlowLayoutPanel'i temizle
            flowLayoutPanel1.Controls.Clear();

            // TextBox ve Label listelerini temizle
            textBoxListesi.Clear();
            labelListesi.Clear();

            // Kalan TextBox sayısını takip etmek için değişken
            int kalanTextBoxSayisi = textBoxSayisi;

            // TextBox ve Label'ları oluştur ve FlowLayoutPanel'e ekle
            for (int i = 0; i < textBoxSayisi; i++)
            {
                // Label oluştur
                Label urunLabel = new Label();
                urunLabel.Name = "lblUrun" + i.ToString();
                urunLabel.Text = "Ürün" + (i + 1).ToString() + ":";

                // TextBox oluştur
                TextBox yeniTextBox = new TextBox();
                yeniTextBox.Name = "txtBox" + i.ToString();
                yeniTextBox.Text = "";
                yeniTextBox.Width = kontrolGenislik - 10;
                yeniTextBox.Height = 20;

                // FlowLayoutPanel'e Label ve TextBox'i ekle
                flowLayoutPanel1.Controls.Add(urunLabel);
                flowLayoutPanel1.Controls.Add(yeniTextBox);

                // Label ve TextBox'i ilgili listelere ekle
                textBoxListesi.Add(yeniTextBox);
                labelListesi.Add(urunLabel);

                // Kalan TextBox sayısını azalt
                kalanTextBoxSayisi--;
            }

            // Kaydet Button'u oluştur ve FlowLayoutPanel'e ekle
            Button kaydetButton = new Button();
            kaydetButton.Name = "btnKaydet";
            kaydetButton.Text = "Kaydet";
            kaydetButton.Width = 100;
            kaydetButton.Height = 30;
            kaydetButton.Click += new EventHandler(KaydetButtonClick);
            flowLayoutPanel1.Controls.Add(kaydetButton);

   

            // FlowLayoutPanel'in AutoScroll özelliğini etkinleştir
            flowLayoutPanel1.AutoScroll = true;
        }


        private void KaydetButtonClick(object sender, EventArgs e)
        {
            // Verileri XML'e aktar
            XmlDocument xmlDocument = new XmlDocument();
            XmlElement rootElement = xmlDocument.CreateElement("TextBoxData");

            for (int i = 0; i < textBoxListesi.Count; i++)
            {


             
                XmlElement textBoxElement = xmlDocument.CreateElement("TextBox");
                textBoxElement.SetAttribute("Name", textBoxListesi[i].Name);
                textBoxElement.SetAttribute("Text", textBoxListesi[i].Text);
                textBoxElement.SetAttribute("UrunAdi", labelListesi[i].Text.Replace(":", "")); // ':' karakterini kaldır

                rootElement.AppendChild(textBoxElement);
            }

            xmlDocument.AppendChild(rootElement);

            // XML belgesini proje klasörüne kaydet
            string xmlDosyaYolu = System.IO.Path.Combine(Application.StartupPath, "TextBoxData.xml");
            xmlDocument.Save(xmlDosyaYolu);

            MessageBox.Show("Veriler XML dosyasına aktarıldı. Dosya yolu: " + xmlDosyaYolu);
        }
    }
}

OKUDUĞUNUZ İÇİN TEŞEKKÜRLER


Elinize sağlık.

Elinize sağlık değişken ürün adları çok hoşuma gitti. :D
Teşekkürler.
 

'Ra

Ticaret Kategori Sorumlu Yardımcısı
21 Kas 2015
2,396
949
Elinize sağlık hocam balistik füze beni benden aldı <3
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.