通过Windows窗体上的控件进行迭代

时间:2010-05-17 01:37:02

标签: c# winforms controls

我似乎有一些奇怪的问题,我相信这将是一件简单的事情。我有一个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循环。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

WinForms控件无法复制;您的代码无法正常工作 将控件添加到第二个面板时,它将从第一个面板中删除。

您可以使用反向for循环移动所有控件 您可以通过创建每个控件的新实例并复制所有属性来复制控件。

编辑:例如:

for (int i = MainPanel.Controls.Count - 1; i >= 0; i--) {
    MainPanel.Controls[i].Parent = m_OptionsControl;
}