C# create an array of controls

12,254

Solution 1

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;
    ...
  }
}

Solution 2

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;
}
Share:
12,254
Kevin
Author by

Kevin

self-taught protege

Updated on June 17, 2022

Comments

  • Kevin
    Kevin almost 2 years

    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?

  • Kevin
    Kevin over 14 years
    this solution works for me. it's exactly what i was looking for.