【问题标题】:programatically add button click in winforms?以编程方式在winforms中添加按钮点击?
【发布时间】:2014-02-12 07:27:39
【问题描述】:

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

    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 += ????

【问题讨论】:

    标签: winforms events event-handling


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      's' 是发送者对象,'e' 是 eventargs。

      【讨论】:

        猜你喜欢
        • 2013-05-02
        • 2014-02-04
        • 1970-01-01
        • 1970-01-01
        • 2012-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多