[英]Add panels inside a panel dynamically on button click
我正在尝试将面板添加到名称为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);
}
为此制作了FlowLayoutPanel
。
这是一个例子; 我使用不同的BackColors
来显示每个新Panel
如何向下推以前的Panel
:
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();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.