我有一个面板MessagesPanel
,其中包含从数据库检索到的消息。我使用foreach
循环遍历这些消息。在循环中,我调用一个名为AddMessageToPanel
的函数,该函数动态添加一个GroupBox
到面板中,并显示消息信息和内容。消息是按照最旧到最新、自上而下的顺序检索的(就像WhatsApp一样)。面板设置为AutoScroll=true
,我希望它可以滚动到最底部,以查看最新的消息。
我尝试了以下解决方案:
但以上解决方案都没有奏效。面板仍然显示相同,滚动条停留在顶部。
具体来说,我尝试了以下代码:
private void MessagePanel_ControlAdded(object sender, ControlEventArgs e)
{
MessagesPanel.ScrollControlIntoView(e.Control);
}
我使用事件ControlAdded
订阅它。
还有:
MessagesPanel.VerticalScroll.Value = MessagesPanel.VerticalScroll.Maximum
使用和不使用 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);
}
我希望
MessagesPanel
可以滚动到底部。如何实现?谢谢!
ScrollControlIntoView
并传入你最后添加的项目实例。最好是在Form.Shown
事件之后再调用该方法。 - Sinatr