繁体   English   中英

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

[英]How to handle WinForms control click event when it's not a double click

我需要区分单击和双击,但是我需要在click事件中执行此操作。 我之所以需要这样做,是因为如果要单击,我要调用功能A,如果要双击,我要调用功能B。但是只有在单击时,才必须调用功能A。

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

您需要在点击事件之后使用计时器等待“一定时间”,以确定点击是否为一次点击。 您可以使用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;
}

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

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

       SetStyle(ControlStyles.StandardDoubleClick, true);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM