在C#中区分Click和DoubleClick事件

Sab*_*one 1 c# events winforms

我目前有一个NotifyIcon作为Windows窗体应用程序的一部分.我希望双击图标时显示/隐藏表单,并在单击时显示气球提示.我有两个功能单独工作,但我找不到让应用程序区分单击和双击的方法.现在,它只需点击两次就可以实现双击.

如果检测到第二次点击,有没有办法阻止单击事件?

Iva*_*oev 6

不幸的是,建议的MouseClick事件处理对NotifyIcon类不起作用- 在我的测试e.MouseClicks中始终为 0,这也可以从参考源中看到。

我看到的相对简单的方法是Click通过使用表单级别标志、async处理程序和Task.Delay

bool clicked;

private async void OnNotifyIconClick(object sender, EventArgs e)
{
    if (clicked) return;
    clicked = true;
    await Task.Delay(SystemInformation.DoubleClickTime);
    if (!clicked) return;
    clicked = false;
    // Process Click...
}

private void OnNotifyIconDoubleClick(object sender, EventArgs e)
{
    clicked = false;
    // Process Double Click...
}
Run Code Online (Sandbox Code Playgroud)

唯一的缺点是,在我的环境中,处理Click延迟了半秒(DoubleClickTime500 毫秒)。


小智 5

有两种不同的事件.

点击/的DoubleClick

MouseClick/MouseDoubleClick

前两个只在EventArgs中传递,而第二个在MouseEventArgs中传递,这可能允许您使用其他信息来确定事件是否是双击.

所以你可以做点什么;

obj.MouseClick+= MouseClick;
obj.MouseDoubleClick += MouseClick;
// some stuff

private void MouseClick(object sender, MouseEventArgs e)
{
    if(e.Clicks == 2) { // handle double click }
}
Run Code Online (Sandbox Code Playgroud)