动态创建按钮并向其添加事件

时间:2014-02-11 22:50:46

标签: c# windows-forms-designer

我需要动态创建按钮(一个用于循环)并在其上添加“onClick”和“doubuleClick”事件。

我是这样做的:

  Button bt = new Button();

  bt.Click += bt_Click;         
  bt.DoubleClick += bt_DoubleClick;

  private void bt_Click(object sender, EventArgs e)
  {
        label1.Text = this.Text;
  }

  private void bt_DoubleClick(object sender, EventArgs e)
  {
        //some code
  }

首先:我的“bt_Click”方法在“label1”中获取“主窗体”文本。在调试器中,我看到发件人是一个按钮。这有什么问题?

第二:我的“bt_DoubleClick”事件根本没有反应,我在这里做错了吗?

感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

您应该将发件人投射到按钮以获取bt.Text:

Button bt = new Button();
bt.Click += bt_Click;
bt.Text = "click me";
bt.Location = new Point(100,100);
this.Controls.Add(bt);

private void bt_Click(object sender, EventArgs e)
{
    label1.Text = (sender as Button).Text;
}

按钮不会对双击事件做出反应。您可以详细阅读here

答案 1 :(得分:1)

在回答第一个问题时,如果我理解正确,在this.Text中,this会引用表单,因为方法bt_Click是主窗体类的成员。我想你可能有意这样做:

private void bt_Click(object sender, EventArgs e)
  {
        label1.Text = (Button)sender.Text;
  }

第二:这只是bt_Click处理程序触发两次的情况吗?

答案 2 :(得分:0)

最简单的方法是使用“datagrid”。 Datagread非常支持所有事件和项目组织(图像,文本等)。 我已经制作了“保存”或“打开”对话框,以便从远程SFTP服务器浏览内容,使用datagrad非常容易,但是我在使用按钮或标签时遇到了问题。