儘管我已經掌握瞭如何移動控件並拖放現有的控件來搜索互聯網,但是我沒有獲得如何將控件複製到面板/組框等的解決方案如何拖放控件副本
我正在開發一個應用程序,在該應用程序中將按鈕從 面板拖放到另一面板。我需要的是從Panel-1 中拖動一個按鈕,並將其複製到Panel-2中。下面是截圖
儘管我已經掌握瞭如何移動控件並拖放現有的控件來搜索互聯網,但是我沒有獲得如何將控件複製到面板/組框等的解決方案如何拖放控件副本
我正在開發一個應用程序,在該應用程序中將按鈕從 面板拖放到另一面板。我需要的是從Panel-1 中拖動一個按鈕,並將其複製到Panel-2中。下面是截圖
我有我自己的解決方案。
首先將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);
}
}
有一個內置的方法類的一個對象呼籲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中。 – 2014-10-28 10:50:46
Ya我提到了界面如何創建新對象(現有對象的副本)。 – 2014-10-28 10:52:37