我希望能够判断用户何时停止移动鼠标。我目前在picturebox mousemove事件中有以下内容:
If e.Location.X < oldX Then
mDir = "L"
ElseIf e.Location.X > oldX Then
mDir = "R"
End If
ts1.Text = mDir
oldX = e.Location.X
但是,当鼠标停止移动直到用户点击或移动Y轴时,这不会更新文本框。
提前致谢。
答案 0 :(得分:3)
只需使用Application.Idle
事件,就可以在MouseMove
处理程序中节省上次鼠标操作的时间:
Private Sub Control_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs)
' Your code here...
' Save time of last mouse event
_lastAction = DateTime.Now
End Sub
在Idle
事件处理程序上,您将比较上次操作的时间与实际时间,如果它大于任意阈值,则您检测到停止:
Private Sub Application_Idle(ByVal sender As Object, ByVal e As EventArgs)
If DateTime.Now - _lastAction > TimeSpan.FromMilliseconds(100) Then
mDir = "-"
End If
End Sub
这不是你的情况(因为,通常,你对用户的输入时间没有这么严格的要求),但更精确的解决方案应该涉及Timer
。您将其Interval
设置为阈值,并在每次鼠标操作时启动(或重置)它。当用户未移动鼠标时,将触发其Tick
事件:您暂停计时器并检测到鼠标停止。这比Idle
处理稍微准确一些,但可能没用(而且你只是浪费系统资源),所以我不喜欢第一个解决方案。