添加操作以编程方式添加按钮

时间:2014-12-13 12:20:33

标签: c#

我正在创建一个程序,其中需要有一个与主机上不同内容相关的按钮列表。 我已经实现了这一点,如下面的代码所示(示例代码):

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

这最终将进入for循环,更多按钮将在流程布局上,但我开始小规模并开始工作,所以我以后不会遇到问题。 这会按预期生成按钮(格式化也会在这里完成,但还没有达到目的)。

我坚持的是如何在按钮上添加点击事件/右键单击事件上下文菜单? 我可以将点击事件放在代码中,用于按钮和项目,这些按钮和项目将在表单上修复并且可以正常工作,但我不知道如何动态执行此操作,因为每个目标计算机上的按钮都不同。

我在谷歌上搜索过,但我还没找到我正在寻找的东西(可能是因为我不确定搜索的关键字是什么)。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以在新的+=对象事件中使用btn运算符添加按钮点击事件处理程序:

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

现在您只需要定义处理程序方法:

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