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

标签 c# scroll panel

我有一个面板 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?

它们都不适合我。面板看起来一样,滚动条在顶部。

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

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 一直向下滚动。这该怎么做?谢谢!

最佳答案

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

MessagesPanel.AutoScrollPosition = new Point(0, MessagesPanel.DisplayRectangle.Height);

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

关于c# - 如何在 C# 中将面板滚动到底部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37117055/

相关文章:

javascript - 查找滚动底部问题

javascript - $(document).innerHeight() 和 $(window).innerHeight() 不适用于移动设备

滑动时的 jquerymobile 面板未正确关闭

javascript - 无法在 Chrome 中呈现面板。在 Firefox 中运行良好

java - 无法在java中的jscrollPane中将组件添加到jpanel

c# - 我应该在接线员的右边写什么?

c# - 从不包含在模型 View 中的 Dropdownlist 模型获取发布的 ID

c# - 正则表达式获取大括号之间的文本,偶尔缺少大括号

c# - 连续循环会导致线程问题吗?

android - RecyclerView 中具有动态项目宽度的水平滚动