Поскольку элемент b
будет ссылаться на последнюю созданную динамическую кнопку, поэтому нажатие любой кнопки удалит обработчик события щелчка для кнопки, на которую имеется ссылка в данный момент, в переменной b
, которая будет создана в последний раз.
Использовать sender
получить доступ к экземпляру «текущей» кнопки и удалить обработчик событий щелчка только из «текущей» кнопки.
void b_Click(object sender, EventArgs e)
{
var button = sender As Button;
button.Text = counter.ToString();
button.Click -= b_Click;
counter++;
}
Не использовать закрытый член для динамической кнопки, но локальную переменную
private void button1_Click(object sender, EventArgs e)
{
var button = new Button();
button.Size = new Size(50, 50);
button.Click += b_Click;
this.Controls["flowLayoutPanel"].Controls.Add(button);
}
Если вам нужно где-то сослаться на коллекцию созданной кнопки, вы можете получить к ним доступ из элементов управления панели управления, где были добавлены кнопки
var dynamicButtons = .
this.Controls["flowLayoutPanel"].Controls.OfType<Button>().ToList();
Или сохранить их в выделенной коллекции (в случае, если на панели управления есть другие кнопки)