how to handle programmatically added button events? c#

前端 未结 6 1711
悲哀的现实
悲哀的现实 2020-12-03 07:39

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条回答
  • 2020-12-03 08:03

    Try the following

    Button b1 = CreateMyButton();
    b1.Click += new EventHandler(this.MyButtonHandler);
    ...
    void MyButtonHandler(object sender, EventArgs e) {
      ...
    }
    
    0 讨论(0)
  • 2020-12-03 08:14

    Check out this example How to create 5 buttons and assign individual click events dynamically in C#

    0 讨论(0)
  • 2020-12-03 08:17

    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?

    0 讨论(0)
  • 2020-12-03 08:19

    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;
        }
    
    0 讨论(0)
  • 2020-12-03 08:22

    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;
                }
            }
        }
    
    0 讨论(0)
  • 2020-12-03 08:22

    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.

    0 讨论(0)
提交回复
热议问题