c# - 动态面板元素添加和滚动条

标签 c# .net winforms panel

我写了一个函数来动态添加元素到“面板”。

public int State;        
public Point Point = new Point(0, 0);
public void DialogAdd(string message, string author)
        {
            var d = new DialogMessage();
            if(State == 0)
            {
                d.BackColor = Color.FromArgb(255, 237, 241, 245);
                State = 1;
            }
            else
            {
                State = 0;
            }


            d.Controls["name"].Text = author;
            d.Location = new Point(0, Point.Y);
            d.Controls["msg"].Text = message;
            Point.Y += d.Size.Height;
            Controls["panel1"].Controls.Add(d);

        }

DialogMessage 是 UserControl,它在所有组件上都具有属性“AutoSize=true”。 此面板具有 AutoScroll 属性,因此具有滚动条。 问题在于元素的添加方式不同,具体取决于滚动条的位置。如果滚动条在顶部,则根据需要全部添加。

enter image description here

但是如果在底部添加滚动条的时候,那么添加项就出错了

enter image description here

请告诉我我做错了什么以及如何解决?谢谢你。对不起英语不好

最佳答案

将控件放在面板内时,必须补偿滚动位置:

基本上,尝试使用这一行:

d.Location = new Point(0, panel1.AutoScrollPosition.Y + Point.Y);

关于c# - 动态面板元素添加和滚动条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8885342/

相关文章:

c# - 显示默认设备输出的音量峰值

c# - 以编程方式让客户端应用程序使用 URL 列出在运行时创建的 WCF 服务端点(如 WCF 测试客户端所做的那样)

c# - CacheItemUpdateCallback 中的 HttpContext.Current Null

c# - 这是找到给定月份每周的好算法吗?

c# - 在 C# 中使用 PtrToStructure 进行二进制文件反序列化

c# - 如何设置热键快捷方式 "Ctrl + Plus Sign"

c# - 简单注入(inject)器 : batch registration of classes with multiple interfaces

.net core - 工作单元通用存储库模式

c# - Android应用程序和Winform应用程序之间发送和接收消息

c# - 从 Windows 窗体应用程序调用类