Скрыть указатель мыши

#wpf #vb.net #.net-3.5

#wpf #vb.net #.net-3.5

Вопрос:

Я пытаюсь скрыть указатель мыши, когда прошло несколько секунд бездействия, а затем повторно отобразить указатель снова, когда пользователь перемещает мышь. Я смог заставить указатель мыши скрываться и повторно отображаться по своему усмотрению, однако, когда я выполняю grid.Children.Clear() и grid.Children.Add() указатель мыши снова появляется (но снова скрывается после нескольких секунд бездействия).

Мой код выглядит следующим образом:

 Private Sub Window1_MouseMoved(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseMove
  'MsgBox("Mouse Has Moved", MsgBoxStyle.Critical, "Mouse Moved")
  LastMouseMove = DateTime.Now
  If IsHidden Then
    Cursor = Cursors.Arrow
    IsHidden = False
  End If
End Sub

Private Sub MouseHide_Tick(ByVal sender As Object, ByVal e As EventArgs)
  Dim elaped As TimeSpan = DateTime.Now - LastMouseMove
  If elaped >= TimeoutToHide AndAlso Not IsHidden Then
    Cursor = Cursors.None
    IsHidden = True
    'System.Console.SetCursorPosition(0, 0)
  End If
End Sub

Private Sub setupMouseHide()
  Try
    'Dim timer As New System.Timers.Timer(1000)
    Dim dispatcherTimer As DispatcherTimer = New System.Windows.Threading.DispatcherTimer()
    AddHandler dispatcherTimer.Tick, AddressOf MouseHide_Tick
    dispatcherTimer.Interval = New TimeSpan(0, 0, 3)
    dispatcherTimer.Start()
    Catch ex As Exception
    MsgBox(ex.Message, MsgBoxStyle.Critical, "Setup Display Message: error encountered")
  End Try
End Sub
  

Мне было интересно, является ли это известной проблемой или есть лучший способ достичь того, что я пытаюсь сделать?

Спасибо,

Мэтт

Ответ №1:

Возможно, это ошибка, но нередко изменения макета вызывают событие перемещения мыши.

Я бы сказал, что лучшим выбором может быть проверка и сохранение фактических координат мыши в этом событии перемещения мыши. Таким образом, вы можете игнорировать события ошибочного перемещения мыши.

Не идеально, но я думаю, что это сработало бы.