Получить позицию прокрутки MouseWheel в FlowLayoutPanel

У меня есть FlowLayoutPanel, который пользователь может прокручивать по вертикальной оси. У меня есть следующий обработчик событий, который используется для просмотра места прокрутки пользователя и предоставления номера позиции в блоках размером 405 пикселей:

private void ChangedParentFlowPanel_Scroll(object sender, ScrollEventArgs e)
{
    int NewPos = e.NewValue;

    int range = (NewPos - 1) / 405 + 1;

    CurrentIndex_Changed = range;
    tCounter.Text = CurrentIndex_Changed.ToString();
}

Это прекрасно работает и делает именно то, что мне нужно, когда пользователь прокручивает с помощью вертикальной панели. У меня проблема в том, что мне нужно обновить tCounter с тем же значением, но на этот раз, когда пользователь прокручивает с помощью колеса мыши. Я пробовал следующее, но это только когда-либо дает значение оси Y для местоположения мыши при ее прокрутке, а не для местоположения самой прокрутки:

private void ChangedParentFlowPanel_Wheel(object sender, MouseEventArgs e)
{
    int NewPos = e.Location.Y;
    MessageBox.Show(NewPos.ToString());


    int range = (NewPos - 1) / 405 + 1;

    CurrentIndex_Changed = range;
    tCounter.Text = CurrentIndex_Changed.ToString();
}

Вопрос в том... как я могу получить положение прокрутки прокрутки в ChangedParentFlowPanel при использовании колесика мыши?


person Dan Hall    schedule 29.06.2017    source источник
comment
Используйте свойство панели AutoScrollPosition.   -  person Hans Passant    schedule 29.06.2017


Ответы (1)


Благодаря комментарию Ханса Пасанта вот ответ:

private void ChangedParentFlowPanel_Wheel(object sender, MouseEventArgs e)
{
    int NewPos = Math.Abs(ChangedParentFlowPanel.AutoScrollPosition.Y);

    int range = (NewPos - 1) / 405 + 1;

    CurrentIndex_Changed = range;
    tCounter.Text = CurrentIndex_Changed.ToString();
}

Math.Abs, потому что возвращаемое значение Y прокрутки минус, а мне нужно положительное значение.

person Dan Hall    schedule 29.06.2017