Is it possible to create an array of controls? Is there a way to get the index of a control if more than one of the controls in the array share the same event handler?
+3
A:
Based on Kevins comment:
foreach(Button b in MyForm.Controls.OfType<Button>())
{
b.Click += Button_Click;
}
void Button_Click(object sender, EventArgs e)
{
Button clickedButton = sender as Button;
}
Jan Jongboom
2010-01-30 15:47:41
+1
A:
This is certainly possible to do. Sharing the event handler is fairly easy to do in this case because the Button
which raised the event is sent as part of the event args. It will be the sender
value and can be cast back to a Button
Here is some sample code
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;
...
}
}
JaredPar
2010-01-30 16:59:23
this solution works for me. it's exactly what i was looking for.
Kevin
2010-01-30 18:10:53