【发布时间】:2016-09-04 03:56:28
【问题描述】:
我有一个面板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事件。