2014-10-28 27 views
0

尽管我已经掌握了如何移动控件并拖放现有的控件来搜索互联网,但是我没有获得如何将控件复制到面板/组框等的解决方案如何拖放控件副本

我正在开发一个应用程序,在该应用程序中将按钮从 面板拖放到另一面板。我需要的是从Panel-1 中拖动一个按钮,并将其复制到Panel-2中。下面是截图

enter image description here

回答

0

我有我自己的解决方案。

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

panel1.AllowDrop=true; 

从属性窗口中创建一个DragEnter事件面板

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

接下来,从属性窗口中创建一个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); 
    } 
} 
0

有一个内置的方法类的一个对象呼吁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; 
    } 
} 
+0

虽然拖放工作,原来的按钮正在感动。我实际上需要将该按钮的副本放在面板2中。 – 2014-10-28 10:50:46

+0

Ya我提到了界面如何创建新对象(现有对象的副本)。 – 2014-10-28 10:52:37