【问题标题】:How can I get 2 `Panel` Objects to scroll simultaneously?如何让 2 个“面板”对象同时滚动?
【发布时间】:2012-04-27 15:02:07
【问题描述】:

我在一个表单上有 2 个 Panel 对象并排在一起。 当我滚动第一个面板时,我希望另一个面板滚动完全相同的数量。

类似的东西。

private void Panel1_Scroll(object sender, ScrollEventArgs e)
{
    Panel2.ScrollPosition() = Panel1.ScrollPosition();
}

【问题讨论】:

    标签: c# .net panel


    【解决方案1】:

    我同意 scottm,但添加一些会有所作为的东西:

    private void ScorePanel_Scroll(object sender, ScrollEventArgs e)
    {
        var senderPanel = sender as Panel;
    
        if (senderPanel == null)
        {
            // Might want to print to debug or mbox something, because this shouldn't happen.
            return;
        }
    
        var otherPanel = senderPanel == Panel1 ? Panel2 : Panel1;
    
        otherPanel.VerticalScroll.Value = senderPanel.VerticalScroll.Value;
    }
    

    另一种方式,您总是将 Panel1 更新为 Panel2 的滚动偏移量,因此如果您滚动 Panel2,它实际上不会滚动任何内容。

    现在你有了这个方法,你应该订阅两个面板,像这样:

    Panel1.Scroll += ScorePanel_Scroll;
    Panel2.Scroll += ScorePanel_Scroll;
    

    这可能最好在包含面板的表单的 ctor 中完成。

    【讨论】:

    • 如何订阅这两个面板?示例代码?谢谢,非常感谢
    • @theIrishUser 在答案末尾添加了滚动事件订阅示例。
    【解决方案2】:

    非常接近,这应该适合你:

    private void ScorePanel_Scroll(object sender, ScrollEventArgs e)
    {
        Panel1.VerticalScroll.Value = Panel2.VerticalScroll.Value;
    }
    

    Reading MSDN 在这些情况下总是有帮助。

    【讨论】:

    • 感谢 scottm,唯一的问题是我向下滚动了一点,但我得到了超出范围的异常。尽管两个面板具有相同的数据对象,但它们
    • @theIrishUser,面板的大小是否相同?您可能需要添加一些验证来检查当前值是否在第二个面板的范围内 > 0
    • 它们的大小相同,我通过在初始化时通过代码设置最大大小来解决问题。现在我的问题是它们并不总是保持同步。 (如果我快速移动鼠标)
    猜你喜欢
    • 2014-03-02
    • 1970-01-01
    • 2011-02-02
    • 2020-03-29
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多