Sab*_*one 1 c# events winforms
我目前有一个NotifyIcon作为Windows窗体应用程序的一部分.我希望双击图标时显示/隐藏表单,并在单击时显示气球提示.我有两个功能单独工作,但我找不到让应用程序区分单击和双击的方法.现在,它只需点击两次就可以实现双击.
如果检测到第二次点击,有没有办法阻止单击事件?
不幸的是,建议的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)