在设置为VerticalScroll.Value
的{{1}}的{{1}}中设置Panel
时,滚动位置会相应更改,但拇指的位置不会改变。我是否需要以某种方式更新滚动条(面板上的AutoScroll
不起作用)?有什么想法吗?
答案 0 :(得分:25)
答案 1 :(得分:6)
感谢.PerformLayout()
小费!
在我的情况下这还不够,我在Form.Shown
形式的事件处理程序中设置VerticalScroll.Value,由于某种原因,我必须事先添加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()
行,则完全忽略垂直滚动值设置。
我认为这对其他人来说可能会派上用场。
答案 2 :(得分:0)
尝试自动滚动包含图片框的面板时,我遇到了完全相同的问题。
我找到了另一种让它起作用的方法。将滚动值增加两次:
ScrollPanel.VerticalScroll.Value += AmountToScroll
ScrollPanel.VerticalScroll.Value += AmountToScroll
第一次增加值会导致图片框在面板内滚动,但.Value不会改变,拇指也不会移动。
第二次递增值会导致VerticalScroll.Value递增,移动拇指,但图片框不会再次滚动。
对我来说似乎是一个错误。当然,在第一行代码之后,图片框的滚动和.Value的增加以及拇指的移动都应该发生。
答案 3 :(得分:0)
我遇到了几乎相同的东西,我在带有滚动条的面板中有一个PictureBox(显示图形),我想放大或缩小,使鼠标指针位置“显然”静止。将PictureBox重新定位在面板内以执行此操作会抛出与滚动条的同步,此后,使用滚动条滚动将不会显示PictureBox的完整区域。解决方案是通过为panel.HorizontalScroll.Value和/或panel.VerticalScroll.Value属性分配计算值来完成移动。但仅凭这一点还不够:需要这两种解决方案中的一种才能使应用程序按设计运行:
KMan上面的解决方案:
panel.HorizontalScroll.Value = computed_value
panel.PerformLayout()
或者JJMcLellan上面的解决方案:在我的情况下,将计算值分配两次,例如:
panel.HorizontalScroll.Value = computed_value
panel.HorizontalScroll.Value = computed_value
其中任何一个似乎都有相同的最终结果。由于上面的#2使它看起来像一个bug,#1似乎(希望)由微软(?)设计,我最终在我的应用程序中使用了#1。我只是想在VB.NET环境中确认这些工作。
答案 4 :(得分:0)
我试图使它在表单上工作。我尝试了PerformLayout(),我尝试了Application.DoEvents(),我尝试了两次分配VerticalScroll.Value,但没有一个起作用。我要做的唯一一件事就是将VerticalScroll的属性更改为其他值,然后将其更改回:
protected override void OnVisibleChanged(EventArg e)
{
base.OnVisibleChanged(e);
if (this.Visible)
{
this.VerticalScroll.Maximum++;
this.VerticalScroll.Maximum--;
}
}
请注意,更改VerticalScroll.Value同样有效,但是您必须实际修改其值,并确保更改在Minimum到Maximum范围内,这比临时增加Maximum复杂得多。 / p>