how to handle programmatically added button events

2019-01-11 18:18发布

I'm making a windows forms application using C#. I add buttons and other controls programmatically at run time. I'd like to know how to handle those buttons' click events?

6条回答
Viruses.
2楼-- · 2019-01-11 18:49

In regards to your comment saying you'd like to know which button was clicked, you could set the .Tag attribute of a button to whatever kind of identifying string you want as it's created and use

private void MyButtonHandler(object sender, EventArgs e)
    {
        string buttonClicked = (sender as Button).Tag;
    }
查看更多
我命由我不由天
3楼-- · 2019-01-11 18:52

seems like this works, while adding a tag with each element of the array

Button button = sender as Button;

do you know of a better way?

查看更多
Ridiculous、
5楼-- · 2019-01-11 19:01

Use this code to handle several buttons' click events:

    private int counter=0;

    private void CreateButton_Click(object sender, EventArgs e)
    {
        //Create new button.
        Button button = new Button();

        //Set name for a button to recognize it later.
        button.Name = "Butt"+counter;

       // you can added other attribute here.
        button.Text = "New";
        button.Location = new Point(70,70);
        button.Size = new Size(100, 100);

       // Increase counter for adding new button later.
        counter++;

        // add click event to the button.
        button.Click += new EventHandler(NewButton_Click);
   }

    // In event method.
    private void NewButton_Click(object sender, EventArgs e)
    {
        Button btn = (Button) sender; 

        for (int i = 0; i < counter; i++)
        {
            if (btn.Name == ("Butt" + i))
            {
                // When find specific button do what do you want.
                //Then exit from loop by break.
                break;
            }
        }
    }
查看更多
聊天终结者
6楼-- · 2019-01-11 19:07

Try the following

Button b1 = CreateMyButton();
b1.Click += new EventHandler(this.MyButtonHandler);
...
void MyButtonHandler(object sender, EventArgs e) {
  ...
}
查看更多
不美不萌又怎样
7楼-- · 2019-01-11 19:11

If you want to see what button was clicked then you can do the following once you create and assign the buttons. Considering that you create the button IDs manually:

protected void btn_click(object sender, EventArgs e) {
     Button btn = (Button)sender // if you're sure that the sender is button, 
                                 // otherwise check if it is null
     if(btn.ID == "blablabla") 
         // then do whatever you want
}

You can also check them from giving a command argument to each button.

查看更多
登录 后发表回答