как я могу определить направление прокрутки, когда оно находится в режиме ThumbTrack

#c#

#c#

Вопрос:

У меня проблема с использованием вертикальной полосы прокрутки,, когда она находится в режиме thumbTrack, я не знаю, идет ли она вверх или вниз, так как я могу определить направление прокрутки, когда она находится в режиме ThumbTrack вот код:

     private void vScrollBar_ShowAll_Scroll(object sender, ScrollEventArgs e)
    {

        bool b_allow = false;

        if (e.ScrollOrientation == ScrollOrientation.VerticalScroll)
        {
            if (e.Type == ScrollEventType.SmallIncrement)
            {
                if (ControlIndex < ToIndex){ ControlIndex  ;b_allow = true;}
            }

            else if (e.Type == ScrollEventType.SmallDecrement)
            {
                if (ControlIndex > FromIndex) { ControlIndex--; b_allow = true; }

            }
            else if (e.Type == ScrollEventType.LargeIncrement)
            {
                if (ControlIndex < ToIndex) { ControlIndex  = 10; b_allow = true; }
            }
            else if (e.Type == ScrollEventType.LargeDecrement)
            {
                if (ControlIndex > FromIndex) { ControlIndex -= 10; b_allow = true; }
            }
            else if (e.Type == ScrollEventType.ThumbPosition)
            {
                if (ControlIndex > FromIndex) { ControlIndex -= 10; b_allow = true; }
            }
            else if (e.Type == ScrollEventType.ThumbTrack)
            {

                if (e.NewValue > e.OldValue)
                    if (ControlIndex < ToIndex) { ControlIndex  = 10; b_allow = true; }
                else
                if (ControlIndex > FromIndex) { ControlIndex -= 10; b_allow = true; }
            }
}
  

Ответ №1:

Код, который у вас есть в вашей e.Type == ScrollEventType.ThumbTrack ветке, где вы сравниваете e.NewValue и e.OldValue . похоже, этого достаточно. Помните, что позиция вертикальной полосы прокрутки ( .Value свойство) начинается с минимального значения вверху и опускается до максимального значения.

Я быстро собрал приложение Windows Forms с вертикальной полосой прокрутки. Вот код, который у меня есть в моем Scroll обработчике событий:

 private void vScrollBar1_Scroll(object sender, ScrollEventArgs e) {
    Debug.WriteLine(e.ScrollOrientation.ToString());

    if (e.Type == ScrollEventType.ThumbTrack) {
        if (e.NewValue > e.OldValue) {
            Debug.WriteLine("down");
        } else if (e.NewValue < e.OldValue) {
            Debug.WriteLine("up");
        } else {
            Debug.WriteLine("stay");
        }
    } else {
        Debug.WriteLine(e.Type.ToString());
    }
}
  

Вот результат отладки, который я получаю, когда нажимаю и перетаскиваю вниз:

 VerticalScroll
stay
VerticalScroll
down
VerticalScroll
down
VerticalScroll
ThumbPosition
VerticalScroll
EndScroll
  

Вот что происходит при перетаскивании вверх:

 VerticalScroll
stay
VerticalScroll
up
VerticalScroll
up
VerticalScroll
ThumbPosition
VerticalScroll
EndScroll
  

И, если я начну перетаскивать вниз, а затем переключусь на up:

 VerticalScroll
stay
VerticalScroll
down
VerticalScroll
up
VerticalScroll
up
VerticalScroll
ThumbPosition
VerticalScroll
EndScroll