динамическое создание элементов Windows Forms

Всем привет! Не могу понять как создать "динамические элементы".
Предположим что пользователь нажимая на кнопку, создаёт 2 textBox вводит в них значения, ещё раз нажимает, создаёт ещё 2 и аналогичная ситуация. После всех манипуляций нажимает на кнопку "сохранить", и все значения из всех этих текстбоксов мы записываем в файл, допустим такой формат:

[[TextBox1: Привет, TextBox2: Пока], [TextBox1: Удачи, TextBox2: Миша]]
. Не понимаю как сделает такое.


Ответы (1 шт):

Автор решения: Neomaster

Для наглядности сделал пример на создание одного нового TextBox.

Каждому добавляемому на форму элементу нужно задавать координаты, чтобы они не загораживали друг друга. Следующий элемент должен быть смещен относительно последнего вставленного.

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

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        public static List<TextBox> TextBoxes = new List<TextBox>();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            TextBox newTextBox = new TextBox();
            TextBox lastOldTextBox = TextBoxes.LastOrDefault();
            if (lastOldTextBox == null)
            {
                newTextBox.Location = new Point(30, 50);
                newTextBox.Text = "Hello World!";
            }
            else
            {
                newTextBox.Location = new Point(lastOldTextBox.Location.X, lastOldTextBox.Location.Y + 30);
                newTextBox.Text = $"Hello World! ({TextBoxes.Count})";
            }
            TextBoxes.Add(newTextBox);
            this.Controls.Add(newTextBox);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            int i = 0;
            string textBoxesDesc = string.Concat("[[", string.Join("],\n[", TextBoxes.Select(x => $"TextBox{i++}:{x.Text}")), "]]");

            File.WriteAllText(@".....\textBoxes.txt", textBoxesDesc);
        }
    }
}

процесс

текст

→ Ссылка