.net - 确定鼠标何时停止移动

标签 .net vb.net

我希望能够判断用户何时停止移动鼠标。我目前在图片框 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 轴上移动。

提前致谢。

最佳答案

只需使用 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

这不是您的情况(因为通常您对用户的输入计时没有如此严格的要求),但更精确的解决方案应该涉及计时器。您将其Interval 设置为阈值,并在每次鼠标操作时启动(或重置)它。当用户在这段时间内没有移动鼠标时,将触发其 Tick 事件:您暂停计时器并检测到鼠标停止。这比 Idle 处理更准确,但可能没有用(而且你只是浪费系统资源),所以我不喜欢第一个解决方案。

关于.net - 确定鼠标何时停止移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865021/

相关文章:

vb.net - 如何将 Entity Framework 数据模型移动到同一项目中的单独文件夹

c# - 我能否始终确定通过 FindWindowEx 找到的控件的层次顺序?

.Net System.OutOfMemoryException 填充数据表

.net - .NET 2.0+ 中的简单事件记录实现

c# - 注册免费 COM - 隔离 COM 引用 - 缺少值 '(Default)'

c# - 使 .NET SqlConnection 不使用 Windows session 凭据

c# - 如何从 .NET 以编程方式调用 SSIS?

c# - 如何处理 TransactionInDoubtException

c# - 等效于内联输出参数声明?

VB.NET shell 命令抛出文件未找到异常