C#UserControl.VerticalScroll.Value未设置

Rob*_*and 5 c# controls winforms

我有一大堆C#代码应该在继承自UserControl的类中设置VerticalScroll.Value.当类的任何子对象改变大小时,它会被调用.该类的AutoScroll属性设置为true.

    public void ScrollTo(int top)
    {
        if (top >= this.VerticalScroll.Minimum && top <= this.VerticalScroll.Maximum)
        {
            this.VerticalScroll.Value = top;
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是,在遍历代码时,有时会设置this.VerticalScroll.Value,有时它会保留调用此方法之前的值.

这是VS中的一个错误,还是存在值将忽略尝试设置它的已知条件?

谢谢,罗布

sto*_*one 20

我遇到了同样的问题,并在一些开发论坛中找到了解决方案.设置VerticalScroll.Value后,您必须调用PerformLayout()以使滚动控件更新.这样做:

scrollingcontrol.VerticalScroll.Value = top;
scrollingcontrol.PerformLayout();
Run Code Online (Sandbox Code Playgroud)

这比设置.Value两次更有意义,尽管它似乎具有相同的效果.

  • skypecakes的回答是正确的.我今天遇到了完全相同的问题,并且调用PerformLayout()解决了它.谢谢. (2认同)

小智 5

我遇到了同样的问题,我在 MSDN 网页上找到了一个解决方案(不允许我发布链接,因为我是新用户)。

建议的解决方案是分配给 .Value 两次,它对我有用:

int newVerticalScrollValue = 
         pDashboard.VerticalScroll.Value - pDashboard.VerticalScroll.SmallChange;

pDashboard.VerticalScroll.Value = newVerticalScrollValue;
pDashboard.VerticalScroll.Value = newVerticalScrollValue;
Run Code Online (Sandbox Code Playgroud)