7

我希望仅在双击按钮时才发生事件,而不是在单击按钮时发生事件。遗憾的是,双击事件没有出现在 IDE 的事件列表中。

有谁知道解决这个问题的好方法?谢谢!

4

4 回答 4

22

不,标准按钮不会对双击做出反应。请参阅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)  {
    }
}
于 2012-11-21T04:45:11.477 回答
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
        };
于 2020-12-23T11:37:03.073 回答
-1

我曾经在我的对象上添加 MouseDoubleClick 事件,例如:

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

于 2017-04-18T07:51:43.543 回答
-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
})
于 2012-11-21T17:09:19.287 回答