【问题标题】:C# Clone a panel to other formC# 将面板克隆为其他形式
【发布时间】:2013-10-15 07:14:42
【问题描述】:

我的问题很容易解释,但很难得到答案。 我有 2 个表格。在 form1 我什么都没有,在 form2 我有一个面板,里面有控件。基本上,当我从 form1 中单击一个按钮时,我想将面板从 form2 克隆/复制到 form1,保持它的所有控件和属性相同。

我已经在按钮单击事件中创建了一个 form2 的实例,并在 form2.designer.cs 中公开了面板,这样我就可以在不打开 form2 的情况下访问它。我试图在 form1 中有一个面板,以便我将该面板与另一个面板相同,但没有奏效。我没有想法,在网上找不到任何东西。有人可以帮我吗? 很抱歉有任何英文错误。

【问题讨论】:

  • copy所有控件的所有属性并不容易。最重要的是我们实际上从不在实际应用中做这样的事情
  • 我试图这样做是为了一个目的。我希望我的应用程序合并我的所有表单。因此,使用面板,我会将所有控件从 form2 传递到 form1。您可以将其视为 mdi 应用程序,但略有不同。
  • 基本上你可以把它看成是一个面板的“mdi”应用。
  • 如果你想通过剪贴板来做......那么这里有一种方法,例如如果您的每个表单都是一个单独的过程并且您需要交换控制数据,或者您可能想要支持复制而不仅仅是剪切/粘贴,您可以使用。 codeproject.com/Articles/12976/…

标签: c# winforms copy clone panel


【解决方案1】:

对我来说听起来像是一个肮脏的黑客,但它的价值:从 form1 创建对 form2 的引用。当您执行“复制”时,您会在 form1 上创建所有控件的列表,然后清除 form1。然后将控件添加到 form2。

将此方法添加到 form1...form2 是您对第二个表单的引用。使用按钮单击等事件触发此事件。

public void CopyControls()
{
    List<Control> ctrls = new List<Control>();
    foreach (Control c in this.Controls)
    {
        ctrls.Add(c);
    }
    this.Controls.Clear();
    form2.Controls.AddRange(ctrls.ToArray());
}

我个人不建议这样做,这太可怕了,我敢打赌会有一种更清洁的方式来实现你想要的!

【讨论】:

  • 完美运行。我现在只有一个问题。该面板出现在所有 form1 控件的后面。我怎样才能把那个面板放在前面?我尝试在 foreach 中使用 c.BringToFront() 但它不起作用。
  • @user2858325...嗯...说实话...除了您尝试过的之外,我不知道。就像我说的......这是一个肮脏的黑客,所以你会遇到问题!祝你好运
  • 整个代码不会复制或克隆而是移动控件。
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 2011-08-20
  • 2021-04-27
相关资源
最近更新 更多