WinForms如何在按钮上调用双击事件?

7

我希望的是当按钮被双击时才触发事件,而不是单击一次。可惜在IDE的事件列表中没有双击事件。

有人知道这个问题的好解决办法吗?谢谢!


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

23

标准按钮不会响应双击。请参考Button.DoubleClick事件的文档。在Windows中,按钮总是响应单击而不是双击。 不过,如果您创建的按钮与系统中的其他按钮行为不同,有些用户可能永远也不会弄清楚。

话虽如此,您必须创建一个派生自Button的单独控件来处理这个问题(因为SetStyle是受保护的方法)。

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

那么你将不得不在你的代码中手动添加 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吗?我的意思是,我们如何从不同的类中设置Form1上按钮的ControlStyles属性? - Mogli
我不是专家,但是setstyle也可以在没有继承的情况下使用。在这里查看答案:https://dev59.com/qZbfa4cB1Zd3GeqPr1A5 - barlop
假设我有一组需要双击事件的按钮。 我是不是必须一个一个地添加它们?还是有一种方法可以获取所有组按钮并将它们分配到该方法中? 我试图这样做,但我无法为组按钮设置事件。 - user2225495

0

使用这个。代码有效。

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

 DoubleClickButton button = new DoubleClickButton();
 button.DoubleClick += delegate (object sender, EventArgs e)
        {
           //codes
        };

-1
我曾经在我的对象上添加 MouseDoubleClick 事件,代码如下:
this.pictureBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox_MouseDoubleClick);

请编辑您的答案以包含一些解释。仅有代码的答案对于教育未来的SO读者几乎没有作用。您的答案因为低质量而在审核队列中。 - mickmackusa

-2
双击是指在一段时间t内发生的两个常规点击事件。
以下是一些伪代码,假设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会告诉您是否双击。 - Eric Falsken
它与双击无关。 - Diego

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接