C# 如何使2个“面板”对象同时滚动?

C# 如何使2个“面板”对象同时滚动?,c#,.net,panel,C#,.net,Panel,我有两个面板对象在一个表单上,彼此相邻。 当我滚动第一个面板时,我希望另一个面板的滚动量完全相同 像这样的 private void Panel1_Scroll(object sender, ScrollEventArgs e) { Panel2.ScrollPosition() = Panel1.ScrollPosition(); } 非常接近,这应该适合您: private void ScorePanel_Scroll(object sender, ScrollEventArgs

我有两个
面板
对象在一个表单上,彼此相邻。 当我滚动第一个面板时,我希望另一个面板的滚动量完全相同

像这样的

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

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

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

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

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

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

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

我同意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中完成。

我同意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中完成。

谢谢scottm,唯一的问题是我向下滚动了一点,但是我得到了一个超出范围的异常。尽管两个面板具有相同的数据对象them@theIrishUser,面板大小是否相同?您可能需要添加一些验证,以检查当前值是否在第二个面板的范围内>0。它们的大小相同,我在初始化它们时通过代码设置了最大大小,从而解决了这个问题。现在我的问题是它们并不总是保持同步。(如果我快速移动鼠标)谢谢scottm,唯一的问题是我向下滚动了一点,但是我得到了一个超出范围的异常。尽管两个面板具有相同的数据对象them@theIrishUser,面板大小是否相同?您可能需要添加一些验证,以检查当前值是否在第二个面板的范围内>0。它们的大小相同,我在初始化它们时通过代码设置了最大大小,从而解决了这个问题。现在我的问题是它们并不总是保持同步。(如果我快速移动鼠标)如何订阅两个面板?示例代码?多谢各位appreciated@theIrishUser在答案末尾添加了滚动事件订阅示例。如何订阅这两个面板?示例代码?多谢各位appreciated@theIrishUser在答案末尾添加了滚动事件订阅示例。