自动滚动面板到底部

10

我在WinForms中有一个面板,并在其中加载了一些用户控件。

我想每次添加新的用户控件时,自动滚动到面板底部(因为我的面板会填充)。我该如何做?

3个回答

23

您可以通过设置面板的VerticalScroll来实现,但我认为最好使用ScrollControlIntoView

private void panel1_ControlAdded(object sender, ControlEventArgs e)
{
    panel1.ScrollControlIntoView(e.Control);
}

祝你好运!


1
这似乎有效...但我发现一件奇怪的事情是,虽然面板中的其他控件会相应地向上移动,但作为滚动面板子级的TableLayoutPanel却不会随之移动。你必须在滚动后通过编程手动移动它们。很奇怪。 - eidylon

22

您可以使用ScrollControlIntoView并传递您最后添加的控件。

另一个解决方案是:

panel.VerticalScroll.Value = panel.VerticalScroll.Maximum

9
如果有人尝试这个解决方案,遇到滚动条没有更新的问题,需要在设置Value后调用PerformLayout()。问题和解决方案在这里得到确认:https://dev59.com/62035IYBdhLWcg3wMNCW - Rob
注意,如果您动态添加用户控件,则还必须手动更新panel.VerticalScroll.Maximum的值。 - Darkhan ZD

0
我发现每次在面板上以垂直增量连续添加控件时,每当用户向上或向下滚动面板时都会受到负面影响。我采用了上面Homam的提示,并发现以下方法效果很好:
panel1.VerticalScroll.Value = 0;

// Creating and adding a TextBox, tb, to the panel

panel1.ScrollControlIntoView(tb);

首先,我滚动到顶部,以便为我的文本框使用绝对垂直位置,然后放置文本框,最后确保新创建的文本框出现在视野中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接