我搜索了其他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);
}
}
2条答案
按热度按时间gc0ot86w1#
首先,您必须将线
int x = 100;
移出循环,否则它将使每个面板位于相同的坐标。其次,您不能多次添加相同的组件,因此我建议您创建一个UserControl,然后示例化它。最后,我想补充一点,变量x
用于Y坐标(我不知道这是否是故意的)。lrpiutwd2#
这是因为您没有复制面板控件。您只是多次添加同一对象,然后在同一对象上设置位置。