NoLiver92
NoLiver92

Reputation: 892

Adding actions to programmatically added buttons

I am creating a program where it is required to have a list of buttons which relate to different things on the host computer. I have achieved this as shown in the code below (example code):

Button btn = new Button();
btn.Name = "Button1";
btn.Text = "Item 1";
this.formLayoutProject.Controls.Add(btn);

This will eventually go into a for loop and more buttons will be on the flow layout, but i am starting small scale and working up so i don't get problems later. This produces the button as expected (formatting will be done here too but haven't got that far).

What I am stuck on is how would I add a click event/right click event context menu onto the button? I can put the click events in the code for buttons and items which will be fixed on the form and they work but I don't know how to do this dynamically as the buttons will be different on each target machine.

I have searched on Google but I haven't found what im looking for (probably due to the fact im not sure what the keywords are for the search).

How would I accomplish this?

Upvotes: 0

Views: 82

Answers (1)

Jason Faulkner
Jason Faulkner

Reputation: 6568

You can add a button click event handler by using += operator on the event of your new btn object:

// Add 10 buttons dynamically.
// Bind to the same method.
for (var i = 1; i <= 10; i += 1)
{
    Button btn = new Button();
    btn.Name = "Button" + i;
    btn.Text = "Item " + i;
    this.formLayoutProject.Controls.Add(btn);

    // Add handler.
    btn.Click += btn_Click;
}

Now you just need to define the handler method:

private void btn_Click(object sender, EventArgs e)
{
    // This is the button which was clicked.
    var button = (Button)sender;
    var buttonName = button.Name;

    // Do some stuff.

    // To detect certain mouse click events, cast e as a MouseClick.
    MouseEventArgs mouseEvents = (MouseEventArgs)e;

    // Now use the mouseEvents object to handle specific events based on the button clicked.
    if (mouseEvents.Button == MouseButtons.Right)
    {
        // Right button clicked.
    }
    else if (mouseEvents.Button == MouseButtons.Left)
    {
        // Left button clicked.
    }
}

Upvotes: 3

Related Questions