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

本文关键字:双击 事件 单击 何处理 处理 控件 WinForms | 更新日期: 2023-09-27 18:33:29

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

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

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

单击和双击可以单独处理

单击 -> http://msdn.microsoft.com/en-US/library/system.windows.forms.control.click(v=vs.80).aspx

双击 -> http://msdn.microsoft.com/en-US/library/system.windows.forms.button.doubleclick(v=vs.80).aspx

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