【问题标题】:How do I drag and drop copy of controls如何拖放控件的副本
【发布时间】:2014-10-28 10:28:34
【问题描述】:

虽然我知道如何在互联网上搜索时移动控件并拖放现有控件,但我没有找到如何将控件复制到面板/组框等的解决方案。

我正在开发一个应用程序,在该应用程序中,我从 面板到另一个面板。我需要的是从 Panel-1 中拖动一个按钮 并将其“副本”粘贴到 Panel-2 中。这是截图

【问题讨论】:

    标签: c# .net drag-and-drop drag


    【解决方案1】:

    有一种内置方式的对象有一个称为 MemberwiseClone 的受保护方法,它应该对对象上的所有成员进行高级克隆。你可以在这里阅读:

    ICloneable 接口:支持克隆,它创建一个与现有实例具有相同值的类的新实例。

    ICloneable 接口使您能够提供创建现有对象副本的自定义实现。 ICloneable 接口包含一个成员,即 Clone 方法,该方法旨在提供超出 Object.MemberwiseClone 提供的克隆支持。有关克隆、深拷贝和浅拷贝以及示例的详细信息,请参阅 Object.MemberwiseClone 方法。

    http://msdn.microsoft.com/en-us/library/system.icloneable.aspx

    public class ControlCloner<T>
    {
      public T CloneObject(T sourceObject)
     {
         T newObject = new T();
    
       // Set properties & events of newObject using reflection... look at the methods available on the Type class.
          return newObject;
       }
     }
    

    【讨论】:

    • 虽然拖放工作正常,但原始按钮正在移动。我实际上需要将该按钮的副本放在面板 2 中。
    • 是的,我已经提到了如何创建新对象(现有对象的副本)的接口。
    【解决方案2】:

    我有自己的解决方案。

    首先将Panel的AllowDrop属性设置为true。

    panel1.AllowDrop=true;
    

    从属性窗口为 Panel 创建一个DragEnter 事件

    private void panel1_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }
    

    接下来,从属性窗口为 Panel 创建一个DragDrop 事件

    private void panel1_DragDrop(object sender, DragEventArgs e)
    {
         Control c = e.Data.GetData(e.Data.GetFormats()[0]) as Control;
         // Declare rnd globally for creating random id for dynamic button(eg : Random rnd = new Random();)
         Button btn = new Button();
         btn.Name = "Button" + rnd.Next(); 
         btn.Size = c.Size;            
         btn.Click += new System.EventHandler(DynamicButton_Click);
         if (c != null)
         {                
             btn.Text = c.Text;
             btn.Location = this.panel1.PointToClient(new Point(e.X, e.Y));
             this.panel1.Controls.Add(btn);
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多