保存滚动条状态/位置

时间:2013-02-10 10:15:54

标签: c# .net winforms scrollbar

我有一个面板,我可以动态添加自定义控件。如果控件超出面板边界,则水平/垂直滚动条会自动显示(AutoScroll == true),滚动条将通过以下代码跟随控件:

if(panelDiagram.VerticalScroll.Visible || panelDiagram.HorizontalScroll.Visible) {
    panelDiagram.ScrollControlIntoView(tempNode);
}

这样,在移动tempNode时,滚动条将跟随它。

当我从数据库再次加载所有内容时,有没有办法保留滚动条的状态?我尝试了许多像ScrollControlIntoView(lastAddedControl)这样的东西,但没有任何工作。也许我必须关掉AutoScroll并用手来管理所有事情?

1 个答案:

答案 0 :(得分:0)

Panel派生自ScrollableControl,它会公开您可能会觉得有用的一些属性:

  • AutoScrollPosition
  • VerticalScroll
  • HorizontalScroll

看起来autoScrollPosition就是你所追求的;它是一个Point实例,包含每个滚动条的当前X和Y滚动坐标。如果您只进行垂直滚动,X将为零。

保存如下:

public override void OnLoad(Object sender, EventArgs e) {

    this.panel1.AutoScrollPosition = GetSavedScrollPoint();

}

public override void OnFormClosing(Object sender, EventArgs e) {

    SavePointSomewhere( this.panel1.AutoScrollPosition );
}