在C#中将表单的控件加载到面板

时间:2013-10-10 14:22:00

标签: c# controls panel

我想将Form的控件加载到C#中的面板,因此面板将显示与窗体相同的组件。我试过这段代码:

foreach (Control control in (new Form2()).Controls)
{
    panels[panelsCounter].Controls.Add(control);
}

但问题是,当我运行程序时,它只加载我最后添加的控件类型(例如,如果我添加了标签,而不是我在表单中添加了一个按钮它只显示一个按钮,但是如果我添加另一个标签,它会显示两个标签,但不会显示按钮)。

请帮帮我。

2 个答案:

答案 0 :(得分:2)

这是一个经典的错误,你在迭代时修改了这个集合。副作用是只有其他控件才会移动到面板上。您需要仔细执行此操作,向后迭代集合以避免此问题:

var formObj = new Form2();    //???
for (int ix = formObj.Controls.Count-1; ix >= 0; --ix) {
    panels[panelsCounter].Controls.Add(formObj.Controls[ix]);
}

答案 1 :(得分:0)

控件不能设计为多次显示。您无法将控件添加到多个表单,也不能多次向表单添加相同的控件。它们根本不是为了支持它而设计的。

您可以浏览每个控件并创建相同类型的新控件,甚至可以复制其属性的值(或者至少可以公开访问的属性),有效地克隆它们,但重要的是它是一个您添加到新面板的不同控件。