2010-10-11 37 views
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"; 
     } 
    } 

有一个更好的办法?

回答

2

你的代码中使用:

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

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

我想补充的只是确保你是在回发创建控件过的唯一的事,恢复到之前的ViewState,这样的事件其实是可以调用。

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); 
    } 
} 
相关问题