Пользовательские мелкие и большие изменения TrackBar при перемещении / прокрутке мыши вверх и вниз в VB.NET

Ну я пробую что-то вроде этого:

    Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
    Dim scv As Int32 = TrackBar1.Value
    Dim uni As [String] = "ms"

    Select Case scv
        Case Is > 1000
            scv = scv \ 1000
            uni = "s"
            sender.SmallChange = 1000
        Case Is > 100
            sender.SmallChange = 50
        Case Is > 50
            sender.SmallChange = 50
        Case Is > 25
            sender.SmallChange = 25
        Case Is > 10
            sender.SmallChange = 15
    End Select

    Label4.Text = (scv & uni).ToString
End Sub

Но его онил работает с клавишами со стрелками и >, если я попробую с помощью движения мыши или колеса прокрутки мыши, не работает. И ... Работает только если я иду слева направо ...

Что я должен сделать? :(


person Seazoux    schedule 04.07.2013    source источник
comment
Я думаю, что понял. При использовании мыши вы хотите, чтобы она прыгала дискретными фрагментами на основе значения SmallChange, как при использовании клавиш со стрелками? Для этого, я думаю, вам нужно вычислить, какое новое значение должно быть изменено в режиме реального времени.   -  person Idle_Mind    schedule 04.07.2013
comment
Да, вы все поняли ... Если вы разместите код, я за вас проголосую;)   -  person Seazoux    schedule 04.07.2013


Ответы (2)


Попробуйте что-нибудь подобное ...

Private Sub TrackBar1_Scroll(sender As Object, e As EventArgs) Handles TrackBar1.Scroll
    Dim bar As TrackBar = DirectCast(sender, TrackBar)

    Select Case bar.Value
        Case Is >= 1000
            bar.SmallChange = 1000
        Case Is > 100
            bar.SmallChange = 50
        Case Is > 50
            bar.SmallChange = 50
        Case Is > 25
            bar.SmallChange = 25
        Case Is > 10
            bar.SmallChange = 15
    End Select

    Dim discrete As Integer = TrackBar1.Value \ TrackBar1.SmallChange
    Dim Value As Integer = discrete * bar.SmallChange
    bar.Value = Math.Min(Math.Max(bar.Minimum, Value), bar.Maximum)

    Label4.Text = IIf(bar.Value >= 1000, bar.Value \ 1000, bar.Value) & IIf(bar.Value >= 1000, "s", "ms")
End Sub
person Idle_Mind    schedule 05.07.2013
comment
Ваш код почти хорош, только я не знаю, почему маркер ловится через 9 секунд ... :( - person Seazoux; 05.07.2013
comment
Не уверен ... Я настроил свой, чтобы перейти от 0 (нуля) до 10 000, и, похоже, все прошло нормально. Какие параметры у вас? Можете выложить скриншоты и поподробнее описать, что происходит? - person Idle_Mind; 05.07.2013
comment
Проходит ли он за 9? ... или он просто полностью останавливается на этом? - person Idle_Mind; 05.07.2013
comment
Просто остановитесь на этом полностью. - person Seazoux; 05.07.2013
comment
На последнем снимке кажется, что максимум намного больше 10 000. Что это за изображение на последней картинке? - person Idle_Mind; 05.07.2013
comment
Понятно ... см. Обновленный код выше. Три строки, начинающиеся с Dim discrete, разные. - person Idle_Mind; 05.07.2013
comment
Ух ты! Это прекрасно, только еще одна вещь: P Можете ли вы заставить маркер перемещаться с помощью тиковых линий? (PD: Я был занят и раньше не видел ваше сообщение. = P) - person Seazoux; 06.07.2013

Никогда не используйте TrackBar .. но я думаю, это должно понравиться ..

Dim Trb as TrackBar = CType(sender,TrackBar)

Trb.SmallChange = 1000 

'and so on ..
person matzone    schedule 04.07.2013