我有一个面板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
一直向下滚动。怎么做?谢谢!
发布于 2016-05-09 14:13:04
作为Beldi解决方案的替代方案,您可以调用
MessagesPanel.AutoScrollPosition = new Point(0, MessagesPanel.DisplayRectangle.Height);
在将所有控件添加到面板后。
发布于 2016-05-09 13:58:16
使用ScrollControlIntoView()方法。如下所示:
groupBox.Controls.Add(textBox);
MessagesPanel.Controls.Add(groupBox);
MessagesPanel.ScrollControlIntoView(groupBox);
您还可以使用新的GroupBox添加的位置:
MessagesPanel.AutoScrollPosition = new Point(
groupBox.Right - MessagesPanel.AutoScrollPosition.X,
groupBox.Bottom - MessagesPanel.AutoScrollPosition.Y);
最好的方法是使用flowLayoutPanel
而不是Panel
:
尝试添加flowLayoutPanel
myFlowLayoutPanel.FlowDirection = FlowDirection.TopDown
WrapContents
属性设置为false
https://stackoverflow.com/questions/37117055
复制相似问题