.NET TrackBar MouseDown следовать за курсором?

В настоящее время я использую этот код, чтобы исправить ошибку, при которой, если вы щелкнете где-нибудь на горизонтальной панели треков, она перейдет к середине, а затем к концу трекбара. Таким образом, этот код исправляет эту ошибку, которая теперь переходит к месту, где вы щелкнули.

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

Private Sub tbTest_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles tbTest.MouseDown
    Dim dblValue As Double

    'Jump to the clicked location, bug FIX.
    dblValue = (Convert.ToDouble(e.X) / Convert.ToDouble(tbTest.Width)) * (tbTest.Maximum - tbTest.Minimum)
    tbTest.Value = Convert.ToInt32(dblValue)
End Sub

1 ответ

Решение

Сделайте так, чтобы метод обрабатывал события MouseDown() и MouseMove() следующим образом:

Private Sub tbTest_MovePointer(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles tbTest.MouseDown, tbTest.MouseMove
    If e.Button = Windows.Forms.MouseButtons.Left Then
        Dim dblValue As Double

        'Jump to the clicked location, bug FIX.
        dblValue = (Convert.ToDouble(e.X) / Convert.ToDouble(tbTest.Width)) * (tbTest.Maximum - tbTest.Minimum)
        tbTest.Value = Convert.ToInt32(dblValue)
    End If
End Sub

* Обратите внимание на несколько событий, перечисленных после Handles Ключевое слово в конце первой строки. Я также добавил проверку, чтобы убедиться, что левая кнопка мыши нажата.

Другие вопросы по тегам