【发布时间】:2011-07-30 18:07:18
【问题描述】:
当在Panel 中设置VerticalScroll.Value 并将AutoScroll 设置为true 时,滚动位置会相应更改,但拇指的位置不会。我是否需要以某种方式更新滚动条(面板上的Invalidate(true) 不起作用)?有什么想法吗?
【问题讨论】:
当在Panel 中设置VerticalScroll.Value 并将AutoScroll 设置为true 时,滚动位置会相应更改,但拇指的位置不会。我是否需要以某种方式更新滚动条(面板上的Invalidate(true) 不起作用)?有什么想法吗?
【问题讨论】:
【讨论】:
感谢.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() 行,垂直滚动值设置被完全忽略。
我认为它可能对其他人有用。
【讨论】:
我在尝试自动滚动包含图片框的面板时遇到了完全相同的问题。
我找到了另一种让它工作的方法。将滚动值增加两次:
ScrollPanel.VerticalScroll.Value += AmountToScroll
ScrollPanel.VerticalScroll.Value += AmountToScroll
第一次增加值会导致图片框在面板内滚动,但 .Value 不会改变,拇指也不会移动。
第二次增加值会导致VerticalScroll.Value增加,移动拇指,但图片框不再滚动。
对我来说似乎是一个错误。当然,图片框的滚动和 .Value 的增加以及拇指的移动都应该发生在第一行代码之后。
【讨论】:
我遇到了几乎相同的东西,我在带有滚动条的面板中有一个 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 使它看起来像一个错误,并且#1 似乎(希望)是微软设计的(?),我最终在我的应用程序中使用了#1。我只是想在 VB.NET 环境中确认这两项工作。
【讨论】:
我试图让它在表单上工作。我尝试了 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 也同样有效,但您必须实际修改其值,并确保更改在最小值到最大值的范围内,这比临时增加最大值要复杂得多。
【讨论】: