Добавить событие во время выполнения - PullRequest
0 голосов
/ 11 октября 2010

Мой метод:

private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 1; i < 10; i++)
        {
            Button btn = new Button();
            btn.Name = "btn" + i.ToString();
            btn.Text = "btn" + i.ToString();
            btn.Click += new EventHandler(this.btn_Click);
            this.flowLayoutPanel1.Controls.Add(btn);
        }
    }
    void btn_Click(object sender, EventArgs e)
    {
           Button btn = (Button)sender;
        if (btn.Name == "btn1")
        {
            this.Text = "stack";
        }
    }

Есть лучший подход?

Ответы [ 2 ]

2 голосов
/ 11 октября 2010

Или, может быть:

private void button1_Click(object sender, EventArgs e)
{
    for (int i = 1; i < 10; i++)
    {
        Button btn = new Button();
        btn.Text = "btn" + i.ToString();
        btn.Tag = i;
        btn.Click += delegate
        {
            if ((int)btn.Tag == 1)
                this.Text = "stack";
        };
        this.flowLayoutPanel1.Controls.Add(btn);
    }
}
2 голосов
/ 11 октября 2010

Код, который вы использовали:

btn.Click += new EventHandler(this.btn_Click);

Правильный код для добавления обработчика.Создание кнопок и добавление их в их контейнер выглядит хорошо.

Единственное, что я хотел бы добавить, это просто убедиться, что вы также создаете элементы управления при обратной передаче до восстановления состояния представления, чтобы события могли бытьназывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...