2012-09-14 73 views
1

我想停止timer每當鼠標停止內部groupbox檢測,如果鼠標停止移動vb.net

截至目前移動,我開始計時,當在組合框中的鼠標懸停並停止它時,它離開組框。

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 

回答

1

在MouseMove事件設置名爲LastMoveTime當前定時器經過時間的一類varible。在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 
+0

我會嘗試並報告進度。 –

+0

好的,我瞭解邏輯,但我現在不知道該怎麼做。你能否給我提供一些代碼,以便我可以開始。謝謝。 @Michael –

+0

謝謝...... :) –

0

爲了防止不得不處理這個問題對於很多控件可以重新安排事情有點和緩存瞭解所需要的信息,如果光標移動和閒置多久時間是,要做到這一點,你需要一個Point變量和一個Date變量。定時器需要一直打勾。另外,爲了平衡遊標顯示/隱藏調用,您需要一個變量來跟蹤其可見性狀態。下面是完整的代碼示例:

Private loc As Point, idle As Date, hidden As BooleanPrivate 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秒。該代碼應該很容易理解,當你閱讀並給它一些想法,如果不詢問