2010-01-30 59 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; 
}