在C#中将面板从一个表单复制到另一个表单

时间:2013-11-20 10:12:24

标签: c# user-interface user-controls panel

我正在复制一个带有子面板的面板 如下图所示:

5 Panels inside of One Panel

我使用以下代码构造一个新表单并尝试以该表单填充面板。

public Form3(Panel p)
{
    InitializeComponent();

    foreach(Panel child in p.Controls){
        panel1.Controls.Add(child);
    }
}

但最终发生的事情是,当孩子被添加,原始的Panel开始被删除并失去控制。

最后它会跳过所有其他控件,如下图所示 左侧是原始面板,右侧是新形式的面板。

enter image description here

我应该怎么做呢?我希望原始和新面板具有完全相同的控件。事实上,我甚至不知道为什么它会从原来的Panel中删除它。

P.S 在构造函数内部,我确保查看传入的原始面板是否具有正确的值,并且确实如此。

1 个答案:

答案 0 :(得分:2)

将控件添加到父级时,它会自动将其从上一个父级中删除。然后只会添加到新的父级。

Control提供了一个属性Parent。如果你在两个面板中添加一个控件,你期望control.Parent返回什么?第一个父母还是第二个?

你需要这样的东西

foreach(Panel child in p.Controls)
{
    panel1.Controls.Add(new Panel{ BackColor = child.BackColor });
}
相关问题