在运行时添加事件

时间:2010-10-11 06:32:55

标签: c# winforms events runtime

我的方法是:

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 个答案:

答案 0 :(得分:2)

您使用的代码:

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

是否添加处理程序的正确代码。创建按钮并将它们添加到容器中看起来不错。

我要添加的唯一内容就是确保在视图状态恢复之前也在回发上创建控件,以便实际调用事件。

答案 1 :(得分:2)

或者也许:

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);
    }
}