自动滚动面板到底部
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实现自动滚动到底部显示实时消息,并在拖动的时候取消自动滚动,再次手动滑到底部,又继续自动滚动