如果不是双击,如何处理WinForms控件单击事件

时间:2012-05-07 16:30:37

标签: c# winforms events click double-click

我需要区分单击和双击,但我需要在点击事件期间执行此操作。我需要这个,因为如果单击一下我想调用函数A,如果有双击,我想调用函数B.但是只有单击才能调用函数A.

如何使用C#(或VB)中的标准Winforms实现此目的?

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:3)

您需要在点击事件后使用计时器等待“一段时间”以确定点击是否是单击。您可以使用SystemInformation.DoubleClickTime属性来确定系统将认为顺序单击双击的单击之间的最大间隔。您可能希望为此添加一些填充。

在您的点击处理程序中,增加一个点击计数器并启动计时器。在双击处理程序中,设置一个标志以表示发生了双击。在计时器处理程序中,检查是否引发了双击事件。如果没有,只需点击一下。

这样的事情:

private bool _doubleClicked = false;
private Timer _clickTrackingTimer = 
    new Timer(SystemInformation.DoubleClickTimer + 100);


private void ClickHandler(object sender, EventArgs e)
{
    _clickTrackingTimer.Start();
}

private void DoubleClickHandler(object sender, EventArgs e)
{
    _doubleClicked = true;
}

private void TimerTickHandler(object sender, EventArgs e)
{
    _clickTrackingTimer.Stop();

    if (!_doubleClicked)
    {
        // single click!
    }

    _doubleClicked = false;
}

答案 2 :(得分:0)

另一个选项是创建一个派生自Button的自定义控件,然后在构造函数中调用SetStyles()方法,这是一个受保护的方法)并设置ControlStyles标志

class DoubleClickButton : Button
{
    public DoubleClickButton() : base()
    {

       SetStyle(ControlStyles.StandardDoubleClick, true);
    }
}