如题,如何在Mouse_Down里区分鼠标单击和双击?我这个代码双击的时候还是单击了先。找了度娘,有微软的回复:https://learn.microsoft.com/zh-cn/dotnet/desktop/winforms/how-to-distinguish-between-clicks-and-double-clicks?view=netframeworkdesktop-4.8&redirectedfrom=MSDN
请给出具体的代码,能够区分单击和双击的不同操作。
private DateTime sClickTime = DateTime.MinValue; private DateTime sCloseTime = DateTime.MinValue; private void NILzhdimSoft_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { var clickTime = (DateTime.Now - sClickTime).TotalMilliseconds; if (clickTime < SystemInformation.DoubleClickTime) { //如果是双击 if (Windows.Instance.PlugInOPForm == null) { Windows.Instance.PlugInOPForm = new WndPlugInOP(); } Windows.Instance.PlugInOPForm.ShowPlugInMgrForm(); } else { //如果是单击 sClickTime = DateTime.Now; if ((sClickTime - sCloseTime).TotalMilliseconds > 300) { if (Windows.Instance.DefaultForm.Visible) { ShowWindowMgr.ShowWindow(Windows.Instance.DefaultForm, WindowsState.Hide); } else { ShowWindowMgr.ShowWindow(Windows.Instance.DefaultForm, WindowsState.RunningShow); } sCloseTime = DateTime.Now; } } } }
不太理解你的使用常见,为什么不订阅Click和DoubleClick事件呢?哦,你需要对一个按钮进行单击和双击进行两种不同的处理逻辑对吧。
我没有遇到过这样的场景,但是还是说下我的想法,希望可以帮到你。
就是想区分单击和双击,,,Winform窗体的MouseDoubleClick或者Double的响应都是先执行的Click然后再执行的Double,那个Clicks也用过,双击的话也是先0然后再1再2的变化的,,,
意思是如果双击那会先执行单击的那个操作然后再执行双击的操作。。。所以想区分单击和双击啊。
我上面有贴出微软MSDN的那个链接啊,里面有介绍的,,,但是它那个代码需要定时器啥,觉得不太简洁,,,所以发帖问问大家有否这个问题,给个具体的代码。。。
@lzhdim: 嗯呢,单双击切换确实是比较头痛的问题,我刚才试了一个可能行的解决方案,如果你可以接受的话:
其实也是通过计时,但是要比微软贴出来的简单些,使用 System.Diagnostics.Stopwatch 来测量两次点击之间的时间间隔:
private Stopwatch stopwatch = new Stopwatch();
...
myButton.Click += MyButton_Click;
...
private void MyButton_Click(object sender, EventArgs e)
{
if (!stopwatch.IsRunning)
{
// 启动计时器
stopwatch.Start();
}
else
{
// 停止计时器
stopwatch.Stop();
// 判断两次点击之间的时间间隔
if (stopwatch.ElapsedMilliseconds < SystemInformation.DoubleClickTime)
{
// 处理双击事件的逻辑
MessageBox.Show("双击事件触发");
}
else
{
// 处理单击事件的逻辑
MessageBox.Show("单击事件触发");
}
// 重置计时器
stopwatch.Reset();
}
}
这可以快速响应双击,但有个缺陷就是,单击需要先点击一次,而后再点一次,因为需要把stopwatch停下来,你可以参考一下
还是用微软的方案吧。。。