我目前有一个NotifyIcon作为Windows窗体应用程序的一部分。我希望双击图标时显示/隐藏表单,并在单击时显示气球提示。我有两个功能单独工作,但我找不到让应用程序区分单击和双击的方法。现在,它只需点击两下即可实现双击。
如果检测到第二次点击,是否有办法阻止单击事件?
答案 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毫秒)。