Динамическое создание кнопок на основе данных из csv таблицы
Бьюсь над задачей. Необходимо чтобы при чтении csv таблицы на форме динамически создавались кнопки на основе данных из него. И так же что бы в каждой кнопке выполнялся однотипный код на основе данных из csv.
Данные таблицы например: 12345, Молоко
- Текст Молоко будет присваиваться к сгенерированной кнопке.
- Сгенерированная кнопка при нажатии будет присваивать textBox1.Text значение 12345.
Написал код который генерирует кнопки, нашел код как выгрузить csv таблицу в dataGrid но не могу понять как реализовать это на кнопках. Если не сложно подскажите пожалуйста.
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 32; i++)
{
var button = new Button();
button.Width = 121;
button.Height = 65;
button.Name = "btn" + i;
button.Text = "btn" + i;
button.Click += ButtonOnClick;
flowLayoutPanel1.Controls.Add(button);
}
}
private void ButtonOnClick(object sender, EventArgs eventArgs)
{
var button = (Button)sender;
if (button != null)
{
textBox1.Text = "12345";
}
}
Ответы (1 шт):
Автор решения: motpfofs
→ Ссылка
Можно попробовать создать собственную кнопку, которая будет содержать необходимые данные:
class CSVButton : Button
{
private string CsvName { get; set; }
private string CsvValue { get; set; }
}
И обращаться к ним внутри ивента:
var targetText = @"1234,молоко
34556,творог";
private void Form1_Load(object sender, EventArgs e)
{
foreach (var line in targetText.Split(new string[] { Environment.NewLine }, StringSplitOptions.None))
{
var value = line.Split(',')[0];
var name = line.Split(',')[1];
var button = new CSVButton();
button.Width = buttonWidth;
button.Height = buttonHeight;
button.Name = name;
button.Text = name;
button.CsvName = name;
button.CsvValue = value
button.Click += ButtonOnClick;
flowLayoutPanel1.Controls.Add(button);
}
}
private void ButtonOnClick(object sender, EventArgs eventArgs)
{
var button = (CSVButton)sender;
if (button != null)
{
textBox1.Text = button.CsvValue;
}
}