2010-01-30 48 views
5

是否可以創建一個控件數組?如果數組中的多個控件共享相同的事件處理程序,是否有辦法獲取控件的索引?C#創建一個控件數組

+0

請,定義組件。也許代碼示例會有所幫助。 – 2010-01-30 15:35:21

+0

例如:我想在共享相同的點擊事件的表單上有30個按鈕 – Kevin 2010-01-30 15:42:45

+0

點擊事件的發件人參數將是生成點擊的按鈕,因此獲取索引將是'Array.IndexOf(buttonArray,sender )' – shf301 2010-01-30 15:48:02

回答

7

這當然是可以做到的。在這種情況下共享事件處理程序相當容易,因爲引發該事件的Button將作爲事件參數的一部分發送。這將是sender值,可以轉換回Button

下面是一些示例代碼

class Form1 : Form { 
    private Button[] _buttons; 
    public Form1(int count) { 
    _buttons = new Button[count]; 
    for (int i = 0; i < count; i++) { 
     var b = new Button(); 
     b.Text = "Button" + i.ToString() 
     b.Click += new EventHandler(OnButtonClick); 
     _buttons[i] = b; 
    } 
    } 
    private void OnButtonClick(object sender, EventArgs e) { 
    var whichButton = (Button)sender; 
    ... 
    } 
} 
+0

該解決方案適用於我。這正是我所期待的。 – Kevin 2010-01-30 18:10:53

4

基於Kevins評論:

foreach(Button b in MyForm.Controls.OfType<Button>()) 
{ 
    b.Click += Button_Click; 
} 

void Button_Click(object sender, EventArgs e) 
{ 
    Button clickedButton = sender as Button; 
}