Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# create an array of controls

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?

like image 444
Kevin Avatar asked Jan 30 '10 15:01

Kevin


2 Answers

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;
    ...
  }
}
like image 176
JaredPar Avatar answered Oct 18 '22 20:10

JaredPar


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;
}
like image 40
Jan Jongboom Avatar answered Oct 18 '22 19:10

Jan Jongboom