我似乎有一些奇怪的问题,我相信这将是一件简单的事情。我有一个Windows窗体,在窗体上我有一个名为MainPanel的面板,在MainPanel内部,我有另一个面板,里面有一个按钮,标签位于MainPanel内,但不在第二个面板中。 2个控件。我想要做的是将MainPanel中的所有控件复制到另一个面板对象。我使用以下C#代码来执行此操作:
GUIPanel gp = new GUIPanel();
foreach (System.Windows.Forms.Control ctrl in gp.Controls["MainPanel"].Controls)
{
m_OptionsControl.Controls.Add(ctrl);
}
当我运行此代码时,它会使用按钮复制面板,但不会复制标签。更奇怪的是,当我设置断点并通过调试器运行它时,我输入“?gp.Controls [”MainPanel“]。Controls.Count”在即时窗口中,它返回2,就像它应该的那样。但是,当单步执行代码时,它只执行一次foreach循环。我在这里缺少什么?
答案 0 :(得分:2)
WinForms控件无法复制;您的代码无法正常工作 将控件添加到第二个面板时,它将从第一个面板中删除。
您可以使用反向for
循环移动所有控件
您可以通过创建每个控件的新实例并复制所有属性来复制控件。
编辑:例如:
for (int i = MainPanel.Controls.Count - 1; i >= 0; i--) {
MainPanel.Controls[i].Parent = m_OptionsControl;
}