按钮单击时动态添加面板内的面板

时间:2016-01-03 20:59:46

标签: c# winforms

我尝试将面板添加到名为Tablica的现有面板 但我做错了我每次添加一个面板时增加全局变量,所以新添加的面板有不同的Y位置,这使得我的面板不会相互重叠。 但现在我想使用不同的方法,以便我不添加固定的X,Y位置,而是我以某种方式将它们停靠在顶部,每个新的面板添加停留在父面板的顶部,换句话说,最后一个面板添加单击按钮时,保持在Tablica面板顶部

这是我现在使用的代码,除了在面板底部添加最后一个面板外,它的工作原理是:

int TabliciLocation = 30; //global variable
private void OK_Click(object sender, EventArgs e)
{
    Panel newPanel = new Panel();
    newPanel.Size = new System.Drawing.Size(1200, 52);
    newPanel.Location = new System.Drawing.Point(16, TabliciLocation);
    Tablica.Controls.Add(newPanel);
    TabliciLocation += 60;
}

所以新方法必须是这样的:

 private void OK_Click(object sender, EventArgs e)
    {
        Panel newPanel = new Panel();
        newPanel.Size = new System.Drawing.Size(1200, 52); 
        newPanel.Dock = DockStyle.Top; // if this can help    
        Tablica.Controls.Add(newPanel);

    }

1 个答案:

答案 0 :(得分:4)

FlowLayoutPanel就是这样做的。

这是一个例子;我使用不同的BackColors来显示每个新Panel如何推送前一个{/ p>

enter image description here enter image description here enter image description here

Random R = new Random();
private void button1_Click(object sender, EventArgs e)
{
    Panel p = new Panel();
    p.Name = "panel" + (flowLayoutPanel1.Controls.Count + 1);
    p.BackColor = Color.FromArgb(123, R.Next(222), R.Next(222));
    p.Size = new Size(flowLayoutPanel1.ClientSize.Width, 50);
    flowLayoutPanel1.Controls.Add(p);
    flowLayoutPanel1.Controls.SetChildIndex(p, 0);  // this moves the new one to the top!
    // this is just for fun:
    p.Paint += (ss, ee) => {ee.Graphics.DrawString(p.Name, Font, Brushes.White, 22, 11);};
    flowLayoutPanel1.Invalidate();
}