2010-08-31 129 views
2

我想在運行時創建按鈕。我的問題是,我應該如何在運行時模式下爲每個按鈕添加一個事件?如何在運行時將一個事件添加到按鈕列表

例如:

Button btn; 
int i =0; 
int j =0; 
List<Button> listBTN = new List<Button>(); 

private void button1_Click(object sender, EventArgs e) 
    { 
     btn = new Button(); 
     btn.Location = new Point(60 + i, 90); 
     btn.Size = new Size(50, 50); 
     btn.Name = "BTN"; 

     listBTN.Add(btn); 

     i = i + 50; 

     foreach(Button b in listBTN){ 
     this.Controls.AddRange(new Button[] {b}); 
     } 
    } 

image

回答

3
btn.Click += yourMethod; 

private void yourMethod(object sender, EventArgs e) 
{ 
    // your implementation 
    Button btn = sender as Button; 
    if (btn != null) 
    { 
     //use btn 
    } 
} 
如果你想在聲明按鈕使用添加事件

btn.Click += delegate 
{ 
    //your implementation 
}; 
+0

,這只是增加一個相同的事件給所有的按鈕。我試圖弄清楚的是如何爲每個按鈕設置一個獨特的事件。 – Rye 2010-08-31 09:32:33

+0

重用的事件處理程序方法。事件實例是使用按鈕的每個實例創建的。 – aqwert 2010-08-31 09:37:17

+1

爲此 - 給每個按鈕一個唯一的名稱,並在事件處理程序中使用btn.Name知道它是哪一個,或使用'AnonymousMethods': btn.Click + =新的委託{/ /你的實現'}; – Nissim 2010-08-31 09:37:30

1

你可以做這樣的事情:

Button btn = new Button(); 
btn.Name = "BTN" + i.ToString(); //just to be sure you can distinguish between them 
btn.Click += new EventHandler(btn_Click); 

並添加了對所有按鈕的默認處理程序:

void btn_Click(object sender, RoutedEventArgs e) 
    { 
     Button btn = (Button)sender; 
     MessageBox.Show("You have clicked button number " + btn.Name); 
    } 
+0

是的,我認爲你明白了我的觀點。前段時間我也嘗試過這個解決方案。但是我想要的是每當我添加一個按鈕時,我也會爲該按鈕添加一個事件。那可能嗎? – Rye 2010-08-31 09:36:48

+0

明白了,這也是對的。謝謝 – Rye 2010-09-01 01:17:35

相關問題