2

我需要区分单击和双击,但我需要在单击事件期间执行此操作。我需要这个,因为如果单击我想调用函数 A,如果双击我想调用函数 B。但只有在单击的情况下才必须调用函数 A。

我如何使用 C#(或 VB)中的标准 Winforms 来实现这一点?

4

3 回答 3

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;
}
于 2012-05-07T16:39:33.787 回答
0

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

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

       SetStyle(ControlStyles.StandardDoubleClick, true);
    }
}
于 2012-05-07T16:40:08.570 回答