我需要动态创建按钮(一个用于循环)并在其上添加“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”事件根本没有反应,我在这里做错了吗?
感谢任何帮助。
答案 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非常容易,但是我在使用按钮或标签时遇到了问题。