确定鼠标停止移动的时间

时间:2014-04-04 14:04:07

标签: .net vb.net

我希望能够判断用户何时停止移动鼠标。我目前在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轴时,这不会更新文本框。

提前致谢。

1 个答案:

答案 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处理稍微准确一些,但可能没用(而且你只是浪费系统资源),所以我不喜欢第一个解决方案。