Динамическое создание кнопок на основе данных из csv таблицы

Бьюсь над задачей. Необходимо чтобы при чтении csv таблицы на форме динамически создавались кнопки на основе данных из него. И так же что бы в каждой кнопке выполнялся однотипный код на основе данных из csv.

Данные таблицы например: 12345, Молоко

  1. Текст Молоко будет присваиваться к сгенерированной кнопке.
  2. Сгенерированная кнопка при нажатии будет присваивать 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;
    }
}
→ Ссылка