динамическое создание элементов 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);
}
}
}

