以编程方式添加按钮单击winforms?

时间:2014-02-12 07:27:39

标签: winforms events event-handling

是否可以添加按钮点击事件?我想动态添加控件但我不会将事件绑定到我的控件。

    this.buttonDeneme = new System.Windows.Forms.Button();
    this.buttonDeneme.Location = new System.Drawing.Point(150, 90);
    this.buttonDeneme.Name = "button1";
    this.buttonDeneme.Size = new System.Drawing.Size(122, 23);
    this.buttonDeneme.TabIndex = 0;
    this.buttonDeneme.Text = "FileUpload";
    this.buttonDeneme.UseVisualStyleBackColor = true;
    this.buttonDeneme.Click += ????

2 个答案:

答案 0 :(得分:2)

@dotTutorial的答案会起作用,但很多人的Linq和Lambda表达式仍然有问题,所以如果你不理解它,写这个的最基本的方法是:

this.buttonDeneme.Click += new EventHandler(MyCustomClickHandler);

void MyCustomClickHandler(object sender, EventArgs e)
{
   // do whatever you want here
}

但是创建多个按钮通常是因为它们不会做同样的事情,因此您可能希望将this.buttonDeneme.Tag设置为某种标识符。我更喜欢在那里使用字符串。

然后在点击事件中,您可以检索该值并知道该怎么做。这里是使用标签的更正版本:

this.buttonDeneme.Tag = "SearchBook";
this.buttonDeneme.Click += new EventHandler(MyCustomClickHandler);

void MyCustomClickHandler(object sender, EventArgs e)
{
   // for button created above the value when 
   // the click is called will be "SearchBook"
   string sTag = ((Button)sender).Tag.ToString();

   if(sTag == "SearchBook")
   {
       // do stuff for search book
   }
   else if(sTag == "blablabla")
   {
       // do other stuff
   }
}

答案 1 :(得分:1)

最简单的替代方法是使用lambda表达式。

this.buttonDeneme.Click += ((s, e) => {
// The code that handles a click event
});

's'将成为发送者对象,'e'将成为eventargs。