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

Sip*_*ipo 5 c# scroll panel

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

  1. 自动滚动面板到底部
  2. 如何以编程方式滚动面板
  3. 如何手动滚动面板?

他们都没有为我工作.面板看起来一样,顶部有滚动条.

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

private void MessagePanel_ControlAdded(object sender, ControlEventArgs e)
{
    MessagesPanel.ScrollControlIntoView(e.Control);
}
Run Code Online (Sandbox Code Playgroud)

我订阅了这个活动ControlAdded.

并且:

MessagesPanel.VerticalScroll.Value = MessagesPanel.VerticalScroll.Maximum
Run Code Online (Sandbox Code Playgroud)

有没有MessagesPanel.SuspendLayout();

这是我的功能:

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);
}
Run Code Online (Sandbox Code Playgroud)

我想要MessagesPanel一直向下滚动.这该怎么做?谢谢!

Ges*_*ess 3

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

MessagesPanel.AutoScrollPosition = new Point(0, MessagesPanel.DisplayRectangle.Height);
Run Code Online (Sandbox Code Playgroud)

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