2011-04-06 134 views
8

当设置VerticalScroll.ValuePanel,AutoScroll设置为true时,滚动位置相应地改变,但拇指的位置不改变。我需要以某种方式更新滚动条(面板上的Invalidate(true)不起作用)?有任何想法吗?滚动条在更改滚动值时不更新

回答

24

尝试调用.PerformLayout();

+2

作品。非常感谢。 – EricSchaefer 2011-04-06 11:51:14

+0

是的,可以确认,这对我来说在3种不同的控制方面完美无瑕。谢谢。 – Rob 2012-03-25 22:52:05

+0

伟大的解决方案。 – 2016-11-17 06:47:37

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()行,垂直滚动值设置完全被忽略。

我认为这可能会派上用场。

0

当试图自动滚动包含图片框的面板时,我遇到了完全相同的问题。

我发现了另一种方法使其工作。增量滚动值的两倍:

ScrollPanel.VerticalScroll.Value += AmountToScroll 

ScrollPanel.VerticalScroll.Value += AmountToScroll 

递增首次使图片框到面板中滚动的价值,但.value的不会改变,大拇指不动。

第二次增加值会导致VerticalScroll.Value增加,移动拇指,但图片框不会再次滚动。

看起来像一个bug给我。当然,图片框的滚动和拇指的增加以及拇指的移动都应该在第一行代码之后发生。

0

我跑进东西几乎相同,其中我有一个图片(示出的曲线图)与滚动条在面板内部,我想或缩小保持鼠标指针位置“显然是”静止的放大。将PictureBox重新放置在面板内部以执行此操作将抛出与滚动条的同步,此后,使用滚动条滚动将不会显示PictureBox的全部区域。解决方案是通过将计算值分配给panel.Horizo​​ntalScroll.Value和/或panel.VerticalScroll.Value属性来完成移动。但是,仅仅是不够的:这两个解决方案之一是需要使应用程序表现为设计:

  1. KMan的解决方案上面:

    panel.HorizontalScroll.Value = computed_value 
    panel.PerformLayout() 
    
  2. 还是上面JJMcLellan的解决方案:在我的情况,分配计算值两次,例如:

    panel.HorizontalScroll.Value = computed_value 
    panel.HorizontalScroll.Value = computed_value 
    

任一这些出现的一个为具有相同的最终结果。因为#2以上使得它看起来像一个bug,并且#1看起来(有希望)是由微软设计的(?),所以我最终在我的应用程序中使用了#1。我只想确认这些工作在VB.NET环境中。