10
votes

I wrote a function to dynamically add elements to the "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 is UserControl, that haves property "AutoSize=true" on all components. This panel has got the AutoScroll property, so has got scrollbars. The problem is that the elements are added in different ways, depending on the position of the scrollbar. If the scrollbar is at the top, then all added as needed.

enter image description here

but if at the time of adding the scrollbar at the bottom, then add items going wrong

enter image description here

please tell me what I'm doing wrong and how to fix it? Thank you. sorry for bad english

1
Could please add informations and tags what API you are using? My guess is windows forms, but you will reach more people if you just add the correct tag. - dowhilefor
Now, I fix this problem by using FlowLayoutPanel, but i still want to know, what i am doing wrong :) - Anton

1 Answers

9
votes

When placing the controls inside the panel, you have to compensate for the scroll position:

Basically, try using this line:

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