winforms 以编程方式复制表单中的X个面板

pzfprimi  于 2023-05-23  发布在  其他
关注(0)|答案(2)|浏览(207)

我搜索了其他SO文章,但找不到适合我的解决方案。
我的目标是获取一个已经在Form1中创建和格式化的panel1的副本,并在Form1上复制它n次。
我也想把它们隔开一个给定的垂直距离。下面是我正在使用的代码,它编译没有错误,但是当我打开我的表单时,除了我手动创建的原始面板之外,它没有显示任何东西。

private void Form1_Load(object sender, EventArgs e)
{
    for (int i = 0; i < 5; i++)
    {
        int x = 100;
        this.Controls.Add(panel1);
        panel1.Location = new System.Drawing.Point(10, x);
        x += 200;
    }
}

编辑:我已经根据下面的建议更新了代码,但仍然不起作用。

private void Form1_Load(object sender, EventArgs e)
    {
        int y = 450;
        for (int i = 3; i < 6; i++)
        {
            Panel panel2 = new Panel();
            //Set Properties
            panel2.Controls.Add(this.button10);
            panel2.Controls.Add(this.dataGridView1);
            panel2.Location = new System.Drawing.Point(4, y);
            panel2.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
            panel2.Name = "panel" + i;
            panel2.Size = new System.Drawing.Size(2754, 279);
            panel2.TabIndex = 0;
            y += 300;
            this.Controls.Add(panel2);
        }
    }
gc0ot86w

gc0ot86w1#

int x = 100;
    for (int i = 0; i < 5; i++)
    {
        UserControl1 uc1 = new UserControl1();
        this.Controls.Add(uc1);
        uc1.Location = new System.Drawing.Point(10, x);
        x += 200;
    }

首先,您必须将线int x = 100;移出循环,否则它将使每个面板位于相同的坐标。其次,您不能多次添加相同的组件,因此我建议您创建一个UserControl,然后示例化它。最后,我想补充一点,变量x用于Y坐标(我不知道这是否是故意的)。

lrpiutwd

lrpiutwd2#

这是因为您没有复制面板控件。您只是多次添加同一对象,然后在同一对象上设置位置。

Panel panelToAdd = new Panel();
panelToAdd.Location = new System.Drawing.Point(10, x);
//Set whatever properties you want
this.Controls.Add(panelToAdd);

相关问题