Vb.net .NET轨迹栏鼠标向下跟随光标?

Vb.net .NET轨迹栏鼠标向下跟随光标?,vb.net,trackbar,Vb.net,Trackbar,我目前使用这段代码来修复这个错误,如果你点击水平轨迹栏上的某个地方,它会跳到轨迹栏的中间,然后跳到轨迹栏的末端。因此,这段代码修复了这个bug,它现在跳转到您单击的位置 但当我按住鼠标并在轨迹栏上移动它时,仍然存在一个问题,滑块应该跟随,但它只是重置到起始位置,如何使它跟随光标的右上方?我需要一个定时器控制器吗 Private Sub tbTest_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEve

我目前使用这段代码来修复这个错误,如果你点击水平轨迹栏上的某个地方,它会跳到轨迹栏的中间,然后跳到轨迹栏的末端。因此,这段代码修复了这个bug,它现在跳转到您单击的位置

但当我按住鼠标并在轨迹栏上移动它时,仍然存在一个问题,滑块应该跟随,但它只是重置到起始位置,如何使它跟随光标的右上方?我需要一个定时器控制器吗

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

使方法同时处理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
关键字后面列出的多个事件。我还添加了一个检查,以确保鼠标左键已按下。

使方法同时处理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
关键字后面列出的多个事件。我还添加了一个检查,以确保鼠标左键已按下。

工作正常。谢谢,仍然存在一些小错误,但似乎可以自行修复。错误在于,如果拖动鼠标,它仍然使用旧系统。它将自动运行一秒钟,直到鼠标的末端,然后切换回鼠标所在的位置。要禁用原始轨迹栏移动系统,您必须按住鼠标键,同时在两个间隔棒之间移动,如果其更偏左,它将变为值=0,如果更多,则变为中心,它将变为最大值。我添加了MouseUp,这使它更加罕见,但仍然会发生。我发现的另一个bug dblValue有时会变为负值一些糟糕的计算很可能
e.X
修复了这个bug,使用
如果dblValue<0或lse dblValue>tbTest.Maximum然后返回
,然后另一个bug发现dblValue永远不会达到最大值。如果我对方程做
Math.Ceiling
,它会把所有的方程都搞乱,只是为了最大值。这似乎可以解决最大值问题,如果dblValue>(tbTest.maxium-1)也不算太坏
然后dblValue=tbTest.Maximum
是否有任何其他具有此内置功能的轨迹栏?我能找到的唯一选项是
TickFrequency
,我已将其设置为
0
,并将
TickStyle
设置为
None
,即使中间没有间隔,它仍然会向前或结束。谢谢你的帮助,很可能我们无能为力,哦,不管怎么说,这还是不错的。hii sspoke为什么视频播放时轨迹栏不能跟随光标?效果很好谢谢,仍然有小错误,但它似乎可以自行修复,问题是它仍然使用旧的系统,如果你拖动鼠标,它会自动移动一秒钟到最末端,然后变回鼠标所在的位置。要禁用原始轨迹栏移动系统,您必须按住鼠标键,同时在两个间隔棒之间移动,如果其更偏左,它将变为值=0,如果更多,则变为中心,它将变为最大值。我添加了MouseUp,这使它更加罕见,但仍然会发生。我发现的另一个bug dblValue有时会变为负值一些糟糕的计算很可能
e.X
修复了这个bug,使用
如果dblValue<0或lse dblValue>tbTest.Maximum然后返回
,然后另一个bug发现dblValue永远不会达到最大值。如果我对方程做
Math.Ceiling
,它会把所有的方程都搞乱,只是为了最大值。这似乎可以解决最大值问题,如果dblValue>(tbTest.maxium-1)也不算太坏
然后dblValue=tbTest.Maximum
是否有任何其他具有此内置功能的轨迹栏?我能找到的唯一选项是
TickFrequency
,我已将其设置为
0
,并将
TickStyle
设置为
None
,即使中间没有间隔,它仍然会向前或结束。谢谢你们的帮助,很可能我们无能为力,哦,不管怎样,这还是不错的。hii sspoke为什么视频播放时轨迹栏不能跟随光标?