首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在c#中将面板滚动到底部?

如何在c#中将面板滚动到底部?
EN

Stack Overflow用户
提问于 2016-05-09 13:28:31
回答 2查看 1.6K关注 0票数 5

我有一个面板MessagesPanel,其中包含从数据库中检索到的消息。我使用foreach循环检查消息。在循环中,我调用一个函数AddMessageToPanel,它动态地向面板添加一个GroupBox,其中包含消息信息和内容。从最老到最新、从上到下(如在WhatsApp中)检索消息。面板设置为AutoScroll=true,我希望它滚动到最底层的最新消息。我尝试过那些解决方案:

  1. autoscroll panel to bottom
  2. How to Programmatically Scroll a Panel
  3. How to scroll a panel manually?

他们都不为我工作。面板看起来是一样的,顶部是滚动条。

特别是,我尝试了以下代码:

代码语言:javascript
运行
复制
private void MessagePanel_ControlAdded(object sender, ControlEventArgs e)
{
    MessagesPanel.ScrollControlIntoView(e.Control);
}

我订阅了事件ControlAdded

还包括:

代码语言:javascript
运行
复制
MessagesPanel.VerticalScroll.Value = MessagesPanel.VerticalScroll.Maximum

有无MessagesPanel.SuspendLayout()

这是我的功能:

代码语言:javascript
运行
复制
private void AddMessageToPanel(string sender, string datetime, string content)
{
    GroupBox groupBox = new GroupBox();
    groupBox.Location = new Point(0, 120 * MessagesPanel.Controls.Count);
    groupBox.RightToLeft = RightToLeft.Yes;
    groupBox.Size = new Size(500, 100);
    groupBox.Text = string.Format("{0} ({1})", sender, datetime);

    TextBox textBox = new TextBox();
    textBox.Enabled = false;
    textBox.BackColor = Color.White;
    textBox.BorderStyle = BorderStyle.None;
    textBox.Multiline = true;
    textBox.Size = new Size(495, 95);
    textBox.Location = new Point(0, 20);
    textBox.Text = content;

    groupBox.Controls.Add(textBox);
    MessagesPanel.Controls.Add(groupBox);
}

我希望MessagesPanel一直向下滚动。怎么做?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-09 14:13:04

作为Beldi解决方案的替代方案,您可以调用

代码语言:javascript
运行
复制
MessagesPanel.AutoScrollPosition = new Point(0, MessagesPanel.DisplayRectangle.Height);

在将所有控件添加到面板后。

票数 3
EN

Stack Overflow用户

发布于 2016-05-09 13:58:16

使用ScrollControlIntoView()方法。如下所示:

代码语言:javascript
运行
复制
  groupBox.Controls.Add(textBox);
  MessagesPanel.Controls.Add(groupBox);
  MessagesPanel.ScrollControlIntoView(groupBox);

您还可以使用新的GroupBox添加的位置:

代码语言:javascript
运行
复制
MessagesPanel.AutoScrollPosition = new Point(
             groupBox.Right - MessagesPanel.AutoScrollPosition.X,
             groupBox.Bottom - MessagesPanel.AutoScrollPosition.Y);

最好的方法是使用flowLayoutPanel而不是Panel

尝试添加flowLayoutPanel

  1. 设置myFlowLayoutPanel.FlowDirection = FlowDirection.TopDown
  2. 如果不希望多行或多列,请将WrapContents属性设置为false
  3. SetAutoScroll属性为真
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37117055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档