Обработчик событий кнопки WinForm (динамический)

Я хотел бы выделить каждого из обработчиков событий.

(У меня есть только один в моем коде ниже. Я имею в виду, что динамический обработчик будет лучшим, но любые обходные пути тоже подойдут.)

Пожалуйста, помогите мне.

Спасибо!

    List<Button> VuttonList = new List<Button>();
    private void Form1_Load(object sender, EventArgs e)
    {
        Button Vutton;
        int Kount = 10;
        for (int i = 0; i < Kount ; i++)
        {
            Vutton = new Button();
            Vutton.Text = ( i + 1 ).ToString() ;
            Vutton.Location = new Point(10, 24 * ( i + 1 ) ); 
            Controls.Add( Vutton );
            Vutton.Click    += new EventHandler(Kommon);
            VuttonList.Add( Vutton );
        }
    }

    private void Kommon(object sender, EventArgs e)
    {
        MessageBox.Show(  sender.ToString() );
    }

1 ответ

Решение

Достаточно одного обработчика событий, вы можете привести Button и таким образом вы знаете, какая кнопка была нажата. Также вы можете установить Name свойство кнопок при их создании или назначении Tag свойство их и использовать позже.

for (int i = 0; i < Kount ; i++)
{
    Vutton = new Button();
    //...set properties
    //Also add Name:
    Vutton.Name = string.Format("Vutton{0}", i);
    //Also you can add Tag
    Vutton.Tag = i;
    Controls.Add( Vutton );
    Vutton.Click += new EventHandler(Kommon);
    //... other stuff
}

Тогда вы можете использовать свойства кнопки следующим образом:

private void Kommon(object sender, EventArgs e)
{
    var button = sender as Button;
    //You can use button.Name or (int)button.Tag and ...
    MessageBox.Show(button.Name);
}

Также для макета ваших кнопок, вы можете использовать FlowLayoutPanel или TableLayoutPanel,

Другие вопросы по тегам