自动滚动面板到底部

Posted

技术标签:

【中文标题】自动滚动面板到底部【英文标题】:autoscroll panel to bottom 【发布时间】:2021-08-28 11:03:31 【问题描述】:

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

我想在每次添加新的用户控件时自动滚动到面板底部(当我的面板填充时)。我该怎么做?

【问题讨论】:

【参考方案1】:

您可以通过设置面板的VerticalScroll 来做到这一点,但我认为改用ScrollControlIntoView 会更好。

private void panel1_ControlAdded(object sender, ControlEventArgs e)

    panel1.ScrollControlIntoView(e.Control);

祝你好运!

【讨论】:

这似乎工作......我发现奇怪的一件事是,虽然面板中的其他控件相应地向上移动,但作为滚动面板的子级的 TableLayoutPanel 不会向上移动。您必须在滚动后以编程方式手动移动它们。奇数。【参考方案2】:

您可以使用ScrollControlIntoView 并传递您上次添加的控件。

另一种解决方案是:

panel.VerticalScroll.Value = panel.VerticalScroll.Maximum

【讨论】:

任何尝试此解决方案的人如果遇到滚动条不更新的问题,您需要在设置 Value 后调用 PerformLayout()。此处确认的问题和解决方案:***.com/questions/5565653/… 注意,如果您动态添加用户控件,您还必须手动更新 panel.VerticalScroll.Maximum 的值。【参考方案3】:

我发现每当用户向上或向下滚动面板时,以垂直增量连续向面板添加控件会受到负面影响。我使用了上面 Homam 的提示,发现以下方法效果很好:

panel1.VerticalScroll.Value = 0;

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

panel1.ScrollControlIntoView(tb);

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

【讨论】:

以上是关于自动滚动面板到底部的主要内容,如果未能解决你的问题,请参考以下文章

[Unity学习]使用ScrollRect实现自动滚动到底部显示实时消息,并在拖动的时候取消自动滚动,再次手动滑到底部,又继续自动滚动

[Unity学习]使用ScrollRect实现自动滚动到底部显示实时消息,并在拖动的时候取消自动滚动,再次手动滑到底部,又继续自动滚动

嵌套滚动视图自动滚动到底部

垂直滚动条在树形面板中拖放后自动移动到顶部

自动滚动文本框到底部

textarea 自动滚动到底部