在运行时添加事件

发布于 2024-09-26 18:24:30 字数 609 浏览 3 评论 0原文

我的方法是:

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

还有更好的方法吗?

my method is :

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

There is a better approach ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

愛上了 2024-10-03 18:24:30

您使用的代码:

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

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

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

The code you used:

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

Is the correct code to add the handler. Creating the buttons and adding them to their container looks good.

The only thing I would add is just make sure you are creating the controls on postback too, prior to viewstate being restored, so that the events can actually be called.

但可醉心 2024-10-03 18:24:30

或者也许:

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

Or maybe:

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);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文