我正在复制一个带有子面板的面板 如下图所示:
我使用以下代码构造一个新表单并尝试以该表单填充面板。
public Form3(Panel p)
{
InitializeComponent();
foreach(Panel child in p.Controls){
panel1.Controls.Add(child);
}
}
但最终发生的事情是,当孩子被添加,原始的Panel开始被删除并失去控制。
最后它会跳过所有其他控件,如下图所示 左侧是原始面板,右侧是新形式的面板。
我应该怎么做呢?我希望原始和新面板具有完全相同的控件。事实上,我甚至不知道为什么它会从原来的Panel中删除它。
P.S 在构造函数内部,我确保查看传入的原始面板是否具有正确的值,并且确实如此。
答案 0 :(得分:2)
将控件添加到父级时,它会自动将其从上一个父级中删除。然后只会添加到新的父级。
Control
提供了一个属性Parent
。如果你在两个面板中添加一个控件,你期望control.Parent
返回什么?第一个父母还是第二个?
你需要这样的东西
foreach(Panel child in p.Controls)
{
panel1.Controls.Add(new Panel{ BackColor = child.BackColor });
}