Я пытаюсь реализовать что-то похожее на «бесконечную» прокручиваемость Excel; тем, что пользователь может прокрутить до «низа» документа; но затем продолжайте прокрутку (используя колесо прокрутки или стрелку вниз на полосе прокрутки), и для них будут сгенерированы пустые строки. У меня это в основном работает (при использовании колеса прокрутки мыши работает отлично); но у меня проблемы с функционалом SmallIncrement - то есть; когда пользователь нажимает стрелку вниз на полосе прокрутки, она должна опускаться вниз по полосе прокрутки. SmallChange, несмотря на то, что находится в нижней части диапазона прокрутки полосы прокрутки.
Вот мой код (в обработчике scrollBar_Scroll):
int difference = e.NewValue - e.OldValue;
if (e.Type == ScrollEventType.SmallIncrement)
{
if (difference != scrollBar.SmallChange)
{
int increase = (scrollBar.SmallChange - difference);
scrollBar.Maximum += increase;
scrollBar.Value += increase;
}
}
Глядя на это в отладчике, он устанавливает значения именно так, как я и ожидал. Однако что-то (не знаю, что) происходит после завершения функции, в результате чего scrollBar.Value возвращается к своему первоначальному значению плюс один. Если я удерживаю стрелку вниз, это работает в основном правильно. Он все еще немного подпрыгивает, когда кнопка отпущена.
Есть идеи, что может быть причиной, и как это исправить?
Ура!
Редактировать: Вот мой код колеса прокрутки. Это так похоже, что сбивает с толку, почему это не работает. Это в обработчике событий MouseWheel
на панели.
int desiredValue = scrollBar.Value - e.Delta;
scrollBar.MaximumValue = (Math.Max(normalBottom, desiredValue + scrollBar.LargeChange));
scrollBar.Value = Math.Max(0, desiredValue);
normalBottom
- это переменная, запоминающая «конечное» окончание полосы прокрутки - в Excel это будут либо самые низкие введенные пользователем данные, либо высота экрана; поэтому он обычно прокручивается выше этого значения (без отрицательного значения).