在C#中区分Click和DoubleClick事件

时间:2017-05-25 15:17:53

标签: c# winforms events

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

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

2 个答案:

答案 0 :(得分: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 }
}

答案 1 :(得分:2)

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

我看到的相对简单的方法是使用表单级别标记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...
}

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