Scrollbar не обновляется при изменении значения прокрутки
при установке VerticalScroll.Value
на Panel
С AutoScroll
значение true
, положение прокрутки изменяется соответственно, но положение большого пальца не делает. Нужно ли мне как-то обновлять полосу прокрутки (Invalidate(true)
на панели не работает)? Есть идеи?
4 ответов
спасибо .PerformLayout()
совет!
в моем случае этого было недостаточно, я устанавливаю VerticalScroll.Значение в форме Form.Shown
обработчик событий, и по какой-то причине мне пришлось добавить DoEvents
инструкция заранее для прокрутки к работе.
вот мой Shown
обработчик событий:
Private Sub MyForm_Shown(sender As System.Object, e As System.EventArgs) Handles Me.Shown
System.Windows.Forms.Application.DoEvents()
ScrollPanel.VerticalScroll.Value = ScrollPanel.VerticalScroll.Maximum
ScrollPanel.PerformLayout()
End Sub
управление ScrollPanel имеет тип System.Windows.Forms.Panel
.
без Application.DoEvents()
line, настройка значения вертикальной прокрутки была полностью игнорируемый.
Я подумал, что это может пригодиться кому-то еще.
У меня была точно такая же проблема при попытке автопрокрутки панели, содержащей окно изображения.
Я нашел другой способ заставить его работать. Увеличьте значение прокрутки дважды:
ScrollPanel.VerticalScroll.Value += AmountToScroll
ScrollPanel.VerticalScroll.Value += AmountToScroll
увеличение значения в первый раз вызывает прокрутку окна изображения внутри панели, но.Значение не меняется, и большой палец не двигается.
увеличение значения во второй раз вызывает VerticalScroll.Значение должно быть увеличено, перемещая большой палец, но окно изображения не прокручивается снова.
Кажется мне ошибкой. Конечно, как прокрутка окна изображения ,так и приращение.Значение и движение большого пальца должно происходить после первой строки кода.
я столкнулся с чем-то почти идентичным, где у меня есть PictureBox (показывающий график) внутри панели с полосами прокрутки, и я хочу увеличить или уменьшить масштаб, сохраняя положение указателя мыши "по-видимому" неподвижным. Повторное позиционирование PictureBox внутри панели для этого сбрасывает синхронизацию с полосами прокрутки, а затем прокрутка с полосами прокрутки не будет показывать всю область PictureBox. Решение решение двигаться путем присвоения вычисленное значение к панель.Горизонтальскролл.Значение и / или панель.VerticalScroll.Свойство value. Но этого недостаточно: одно из этих двух решений требуется для того, чтобы приложение вело себя так, как задумано:
-
решение KMan выше:
panel.HorizontalScroll.Value = computed_value panel.PerformLayout()
-
или решение JJMcLellan выше: в моем случае присвоение вычисленного значения дважды, например:
panel.HorizontalScroll.Value = computed_value panel.HorizontalScroll.Value = computed_value
любой из них, по-видимому, имеет одинаковые конечные результаты. С #2 выше делает его похожим на ошибку, и #1 кажется (надеюсь), по дизайну Microsoft (?), Я использовал #1 в моем приложении. Я просто хотел подтвердить обе эти работы в VB.NET окружающая среда.