1

timer每当鼠标停止在groupbox

截至目前,我在鼠标悬停在组框上时启动计时器,并在它离开组框时停止它。

Private Sub gbxMouseMap_MouseHover(sender As Object, e As System.EventArgs) Handles gbxMouseMap.MouseHover
    Timer.Start()
End Sub

Private Sub gbxMouseMap_MouseLeave(sender As Object, e As System.EventArgs) Handles gbxMouseMap.MouseLeave
    Timer.Stop()
End Sub
4

2 回答 2

2

在 MouseMove 事件中,将名为LastMoveTime的类变量设置为当前计时器经过的时间。在 MouseHover 事件中检查LastMoveTime是否已达到超时期限,如果是则停止计时器。

我会让你开始...

Private LastMoveTime As DateTime
Private MouseTimeoutMilliseconds as Integer = 500 


'put inside hover

If  LastMoveTime.AddMilliseconds(MouseTimeoutMilliseconds) < Now Then
 Timer.Stop()
Else
 Timer.Start()
End if
于 2012-09-14T18:54:46.603 回答
0

为了避免必须为许多控件处理此问题,您可以稍微重新安排一些内容并缓存需要了解光标是否已移动以及空闲时间多长时间所需的信息,为此您需要一个 Point 变量和一个 Date 变量。计时器需要一直滴答作响。此外,为了平衡光标显示/隐藏调用,您需要一个变量来跟踪其可见性状态。这是完整的代码示例:

Private loc As Point, idle As Date, hidden As Boolean, Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If loc <> Cursor.Position Then If hidden Then Cursor.Show() hidden = False End If loc = Cursor.Position idle = Date.Now ElseIf Not hidden AndAlso (Date.Now - idle).TotalSeconds > 3 Then Cursor.Hide() hidden = True End If End Sub

此计时器可以根据您想要的响应速度每 1/2-1 秒打勾,空闲时间设置为 3 秒。当您阅读代码并考虑一下时,代码应该很容易理解,如果不问的话

于 2017-03-15T20:27:17.340 回答