2012-11-21 33 views
2

与单击按钮时发生事件不同,我只希望在双击按钮时发生事件。令人遗憾的是,双击事件不会出现在IDE中的事件列表中。WinForms如何调用按钮上的双击事件?

任何人都知道这个问题的一个很好的解决方案?谢谢!

+0

http://msdn.microsoft。 com/en-US/library/system.windows.forms.button.doubleclick(v = vs.80).aspx – JWiley

回答

13

没有标准按钮不会对双击产生反应。请参阅Button.DoubleClick事件的文档。它不会对双击产生反应,因为在Windows按钮中总是对点击作出反应,而不是双击。

你讨厌你的用户吗?因为您将创建一个与系统中任何其他按钮行为不同的按钮,并且某些用户永远不会知道这一点。

这就是说,你必须创建一个从Button衍生事件给这个独立的控制(因为SetStyle是一个受保护的方法)

public class DoubleClickButton : Button 
{ 
    public DoubleClickButton() 
    { 
     SetStyle(ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true); 
    } 
} 

那么你必须在你的代码hanlder手动添加DoubleClick事件因为它仍然不会出现在IDE中:

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     doubleClickButton1.DoubleClick += new EventHandler(doubleClickButton1_DoubleClick); 
    } 

    void doubleClickButton1_DoubleClick(object sender, EventArgs e) { 
    } 
} 
+2

你能告诉我如何链接这两个类DoubleClickButton和Form1,我的意思是我们如何设置ControlStyles的一个从不同的类Form1上的按钮? – Mogli

+0

我不是专家,但setstyle也可以使用没有继承在这里看到答案http://stackoverflow.com/questions/36771882/how-can-i-make-a-button-that-c​​an-sendkeys-into-a -datagridview-so-i-need-to-some – barlop

-1

双击只是在彼此的时间t内的两个常规点击事件。

以下是一个假设吨一些伪代码=0.5秒

button.on('click' , function(event) { 
    if (timer is off or more than 0.5 milliseconds) 
     restart timer 
    if (timer is between 0 and 0.5 milliseconds) 
     execute double click handler 
}) 
+3

不要这样做!您将忽略用户的双击速度设置。如果您按照从按钮导出的其他答案并创建可双击的按钮,Windows会告诉您它是否是双击。 –

+0

它与双击单击无关 – Diego

0

我用于我的物体上添加MouseDoubleClick事件等:

this.pictureBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseDoubleClick);

+0

请编辑您的答案以包含一些解释。仅有代码的答案对未来SO读者的教育很少。您的回答是在低质量的审核队列中。 – mickmackusa