2010-10-11 91 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); 
    } 
} 
相關問題