动态面板元素添加和滚动条

Ant*_*ton 10 .net c# panel winforms

我写了一个函数来动态添加元素到"面板".

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);

        }
Run Code Online (Sandbox Code Playgroud)

DialogMessage是UserControl,在所有组件上都具有属性"AutoSize = true".这个面板有AutoScroll属性,所以有滚动条.问题是元素是以不同的方式添加的,具体取决于滚动条的位置.如果滚动条位于顶部,则根据需要添加所有内容.

在此输入图像描述

但如果在底部添加滚动条时,则添加错误的项目

在此输入图像描述

请告诉我我做错了什么以及如何解决它?谢谢.抱歉英语不好

Lar*_*ech 8

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

基本上,请尝试使用此行:

d.Location = new Point(0, panel1.AutoScrollPosition.Y + Point.Y);
Run Code Online (Sandbox Code Playgroud)