【问题标题】:Copying Panels from one Form to another in C#在 C# 中将面板从一个窗体复制到另一个窗体
【发布时间】:2013-12-04 06:29:45
【问题描述】:

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

我使用下面的代码来构建一个新的表单并尝试在该表单中填充面板。

public Form3(Panel p)
{
    InitializeComponent();

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

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

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

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

附言 在构造函数中,我确保查看传入的原始面板是否具有正确的值,并且确实如此。

【问题讨论】:

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


    【解决方案1】:

    当您将控件添加到父级时,它会自动将其从之前的父级中删除。然后只有它会添加到新的父级。

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

    你需要这样的东西

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

    【讨论】:

    • 是的,我想我必须创建一个新面板。我会为子面板内的每个控件做什么?因为在我真正的子面板中有标签和图像。这是否意味着我必须重新创建它们?
    • 那些控件是静态的还是运行时变化的?
    • 面板内部的内容相同,只是顺序不同
    • 如果它们可以在运行时更改,那么您就不必重新创建它。如果它们是静态的,那么只需继承面板在那里添加所有控件并创建它的实例(它将拥有所有子项)
    • 最后一件事斯里拉姆。我将如何添加孩子拥有的事件监听器?我试过 newP.MouseClick += new child.MouseClick;其中 newP 是新面板。但这不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    相关资源
    最近更新 更多