【问题标题】:Add Event at runtime在运行时添加事件
【发布时间】:2010-10-11 06:32:55
【问题描述】:

我的方法是:

private void button1_Click(object sender, EventArgs e)
    {
        for (int i = 1; i < 10; i++)
        {
            Button btn = new Button();
            btn.Name = "btn" + i.ToString();
            btn.Text = "btn" + i.ToString();
            btn.Click += new EventHandler(this.btn_Click);
            this.flowLayoutPanel1.Controls.Add(btn);
        }
    }
    void btn_Click(object sender, EventArgs e)
    {
           Button btn = (Button)sender;
        if (btn.Name == "btn1")
        {
            this.Text = "stack";
        }
    }

有更好的方法吗?

【问题讨论】:

    标签: c# winforms events runtime


    【解决方案1】:

    你使用的代码:

    btn.Click += new EventHandler(this.btn_Click);
    

    是添加处理程序的正确代码。创建按钮并将它们添加到容器中看起来不错。

    我要添加的唯一一件事就是确保在恢复视图状态之前也在回发时创建控件,以便实际调用事件。

    【讨论】:

      【解决方案2】:

      或许:

      private void button1_Click(object sender, EventArgs e)
      {
          for (int i = 1; i < 10; i++)
          {
              Button btn = new Button();
              btn.Text = "btn" + i.ToString();
              btn.Tag = i;
              btn.Click += delegate
              {
                  if ((int)btn.Tag == 1)
                      this.Text = "stack";
              };
              this.flowLayoutPanel1.Controls.Add(btn);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多