开发者

Add Arrays of C# button Click in code in Run Time

To create Button and its click event in run time I use:

Button b = new Button();
b.Name = "btn1";
b.Click += btn1_Click;

But now I have an array of Buttons to create in run time; how to set each button's event - I cannot interpolate 开发者_C百科because it's not a string.

Button[] b = new Button(Count);
for (int i=0; i < Count; i++)
{
  b[i] = new Button();
  b[i].Name = "btn" + i;
  b[i].Click += ??????
}

what should I do for "?????"


Option 1:

You can pass an lambda function, and create the handler based on the buttons index in the array like this:

for (int i=0; i < Count; i++)
{
   b[i] = new Button();
   b[i].Name = "btn" + i;
   b[i].Click += (sender, args) => 
   {
     // your code
   }
}

Option 2:

You can pass an anonymus delegate:

b[i].Click += delegate (sender, args) {
         // your code
};

Option 3:

You can specify a handler function:

b[i].Click += YourHandlerFunction
// ....

// The handler signature also has to have the correct signature
void YourHandlerFunction(object sender, ButtonEventArgs  args) 
{
    // your code
}


You can bind all buttons to the same event, so put the line like b[i].Click += button_Click;.

Then inside the button_Click event you can differentiate between the buttons, and take the proper actions.

For example:

public void button_Click(object sender, ButtonEventArgs e)
{
  if( sender == b[0] )
  {
    //do what is appropriate for the first button
  }
  ...
}


It depends on what you want to do! If you want to have the same method called for all clicks, do this:

Button[] b = new Button[Count];

for (int i=0; i < Count; i++)
{
    b[i] = new Button();
    b[i].Name = "btn" + i;
    b[i].Click += OnClick
}

private void OnClick(object sender, RoutedEventArgs e)
{
      // do something
} 

If you want to do something different for each button, e.g. depending on the index, you can do something like this:

Button[] b = new Button[Count];

for (int i=0; i < Count; i++)
{
    b[i] = new Button();
    b[i].Name = "btn" + i;
    b[i].Click += (s, e) => { /*do something*/ };
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜