gpt4 book ai didi

c# - 单击按钮在面板内动态添加面板

转载 作者:太空宇宙 更新时间:2023-11-03 19:01:59 25 4
gpt4 key购买 nike

我正在尝试将面板添加到名称为 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 如何将之前的面板向下推:

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

关于c# - 单击按钮在面板内动态添加面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34581539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com