【问题标题】:Saving scrollbars state/location保存滚动条状态/位置
【发布时间】:2013-03-06 01:45:06
【问题描述】:

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

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

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

当我再次从数据库加载所有内容时,有什么方法可以保留滚动条的状态吗?我尝试了很多类似ScrollControlIntoView(lastAddedControl) 的方法,但没有任何效果。也许我必须关掉AutoScroll 并亲自管理一切?

【问题讨论】:

    标签: c# .net winforms scrollbar


    【解决方案1】:

    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 );
    }
    

    【讨论】:

    • 单独保存 AutoScrollPosition X,Y 并重新加载它并不能完成这项工作。如有必要,我可以提供屏幕截图。
    • AutoScrollPosition 是一个结构体,所以不能单独设置字段,必须完全替换结构体实例。
    • 这不是问题。我将 AutoScrollPosition 设置为新的 Point(x,y) 但结果不正确。
    • 原来是代码中的其他问题导致了自动滚动问题。当滚动开始移动时,控件的位置会发生变化,我需要使用 AutoScrollPosition 调整保存到数据库的位置。
    猜你喜欢
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多