Pergunta

I would like to stop the timer whenever a mouse stops moving inside a groupbox

As of now, I start the timer when the mouse hover at the groupbox and stops it when it leaves the group box.

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
Foi útil?

Solução

In the MouseMove event set a class varible named LastMoveTime to the current timer elapsed time. In the MouseHover event check to see if LastMoveTime has reached the timeout period, if so stop the timer.

I will get you started...

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

Outras dicas

To prevent having to handle this for many controls you can rearrange things a bit and cache the information needed to know if cursor has moved and how long the idle time is, to do this you need a Point variable and a Date variable. The Timer needs to tick all the time. In addition, to balance the cursor Show/Hide calls you need a variable to keep track of its visibility state. Here is the complete code sample:

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

This Timer can tick each 1/2-1 seconds depending on how responsive you want it, the idle time is set to 3 seconds. The code should be easy to understand when you read it and give it some thought, if not ask

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top