我有点问题。我试着看看谷歌,但它没有给我什么。
我做了一个小程序,使用全局钩子并点击鼠标坐标。问题是当我使用MouseDown
制作第二个方法时,当我只点击一个按钮时,MouseDown
方法也会运行。
所以问题是:
如何拆分两种方法并让它们单独工作:当我点击时,只触发MouseClick
方法,按下并按住一段时间只触发MouseDown
?
我应该使用某些时间或什么?请给我一个我应该尝试使用的提示。
P.S。对不起,我的英语不好,不是我的母语。
以下是一些代码,我认为是概述。
public void StartRecording()
{
mouseListener = new MouseHookListener(new GlobalHooker());
mouseListener.Start();
mouseListener.MouseClick += new MouseEventHandler(MouseClicked);
mouseListener.MouseDown += new MouseEventHandler(MouseDown);
}
public void MouseClicked(object sender, MouseEventArgs e)
{
MessageBox.Show(String.Format("Mouse was pressed at {0}, {1}",
Control.MousePosition.X.ToString(),
Control.MousePosition.Y.ToString()));
}
public void MouseDown(object sender, MouseEventArgs e)
{
MessageBox.Show(String.Format("Mouse was down at {0}, {1}",
Control.MousePosition.X.ToString(),
Control.MousePosition.Y.ToString()));
}
答案 0 :(得分:1)
当您单击鼠标时两者都是如此。 MouseClick是我所知道的MouseDown和MouseUp,当你按下时会触发MouseDown。当您释放按钮时,MouseUp将被触发..
我认为你必须在MouseDown方法中添加一些功能来计算鼠标按下的时间。这将是我的解决方案。
答案 1 :(得分:1)
在MouseDown
事件中,您应该将当前时间和坐标存储在它们所在类的全局变量中。
然后,您应该使用MouseUp
事件来检测鼠标按钮的释放时间。然后,您可以将新时间和坐标与存储的时间进行比较,以查看按钮按下的时间以及鼠标是否在该时间内移动,并相应地对其进行操作。
或者,如果需要,您还可以使用MouseMove
事件重置时间和坐标。
答案 2 :(得分:1)
作为一种解决方法,请尝试使用MouseClick
,而不是与MouseUp
挂钩。
然后在MouseDown
上将当前时间保存在类级别变量中(示例中为clickTime
)。在MouseUp
再次查看时间。如果时间跨度比较长,那就说3秒 - 按鼠标按下你要做的事情,否则 - 继续鼠标点击。
DateTime clickTime;
public void MouseUp(object sender, MouseEventArgs e)
{
if (DateTime.Now - clickTime > someDelayTime)
{
// Do mouse down
}
else
{
// Do mouse click
}
}
public void MouseDown(object sender, MouseEventArgs e)
{
clickTime = DateTime.Now;
}