0

我想将 Form 的控件加载到 C# 中的面板中,以便面板显示与表单相同的组件。我试过这段代码:

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

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

请帮我。

4

2 回答 2

2

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

var formObj = new Form2();    //???
for (int ix = formObj.Controls.Count-1; ix >= 0; --ix) {
    panels[panelsCounter].Controls.Add(formObj.Controls[ix]);
}
于 2013-10-10T14:29:26.403 回答
0

控件不设计为多次显示。您不能将控件添加到多个窗体,或将相同的控件添加到窗体多次。它们根本不是为了支持它而设计的。

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

于 2013-10-10T14:24:58.210 回答