【问题标题】:Cut,Copy and Paste Any UserDefined UserControl from/on the MDIForm从/在 MDI 表单上剪切、复制和粘贴任何用户定义的用户控件
【发布时间】:2011-05-06 20:06:19
【问题描述】:

我在 C# 3.5 的 Windows 应用程序中创建了许多用户控件。我想复制任何用户控件并将其粘贴到 MDIForm 的另一个位置。在 Cut 选项的情况下也是如此。我在上下文菜单中使用这三个选项。当我右键单击用户控件时,这些选项是可见的。谁能告诉我在运行时如何完成?

【问题讨论】:

    标签: c#


    【解决方案1】:

    这需要给控件一个新的父级。 Winforms 明确支持,它们甚至可以有 no 父级,这真是一个技巧。您可以通过分配 Parent 属性直接执行此操作。或者通过将控件添加到另一个 Controls 集合中,它将自动从之前所在的集合中删除。

    请注意,这种灵活性是有代价的。它也是严重泄漏的来源,可能会在一段时间后使您的程序崩溃。这是由无父技巧引起的,否则由没有后续粘贴的剪切触发。如果您使用 Controls.Remove() 或 Controls.Clear() 则控件将移动到“停车窗口”,这是一个由 Winforms 管道创建的不可见窗口,充当临时主机。如果您随后不将控件移动到另一个父级或忘记调用其 Dispose() 方法,则该控件将永远存在。直到您的程序耗尽资源或用户终止程序。

    资源不足炸弹(“无法创建窗口”)通常在几个小时后发生,因此在调试时很容易错过。您可以在 TaskMgr.exe 的“进程”选项卡中看到它。查看 + 选择列并勾选 USER 对象。还要勾选 GDI 对象和句柄,以确保您的程序没有泄漏。

    如果您将控件放在面板上,则只需一行代码即可通过移动面板将它们全部一起移动。

    【讨论】:

      【解决方案2】:

      您可以在剪切的情况下从 ControlCollection 中删除控件并将其缓存,以便在粘贴时将该控件添加到其他表单中

       panel1.Controls.Add(newPanelButton);// To add, you might have to change the control `Location` as per your need
      
       panel1.Controls.Remove(newPanelButton);//To remove
      

      如果在同一窗体上具有剪切/复制效果,您只需将控件的Location 更改为您要粘贴该控件的新位置。

      【讨论】:

      • 但它适用于多种形式。我只使用一种形式。我想复制一个用户控件并粘贴到同一个表单上,我该怎么办?
      • 只需将控件的“位置”更改为您要粘贴的新位置即可。
      猜你喜欢
      • 1970-01-01
      • 2012-09-02
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多