2013-07-03 59 views
1

如何在C#中進行「拖放和交換」?我想要我的第一個標籤替換第二個標籤,反之亦然。謝謝!下面是我的拖放代碼 - 我希望我可以在dragdrop方法下插入一些東西,但我不知道如何引用數據的發佈位置。在C中拖放#

private void DragDrop_MouseDown(object sender, MouseEventArgs e) 
{ 
    Label myTxt = (Label)sender; 
    myTxt.DoDragDrop(myTxt.Text, DragDropEffects.Copy); 
} 
private void DragDrop_DragEnter(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.Text)) 
     e.Effect = e.AllowedEffect; 
    else 
     e.Effect = DragDropEffects.None; 
} 
private void DragDrop_DragDrop(object sender, DragEventArgs e) 
{ 
    Label myTxt = (Label)sender; 
    myTxt.Text = e.Data.GetData(DataFormats.Text).ToString(); 
} 

回答

1

不是拖動一個字符串,創建一個DataObject實例,這樣就可以通過Label本身。您可以指定自己的自定義格式名稱,以確保內容符合您的期望。這裏有一個簡單的例子:

public partial class Form1 : Form 
{ 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private string DataFormatName = "SomeCustomDataFormatName"; 

    private void DragDrop_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     { 
      Label source = (Label)sender; 
      DataObject data = new DataObject(DataFormatName, source); 
      source.DoDragDrop(data, DragDropEffects.Copy); 
     } 
    } 

    private void DragDrop_DragEnter(object sender, DragEventArgs e) 
    { 
     if (e.Data.GetDataPresent(DataFormatName)) 
      e.Effect = e.AllowedEffect; 
     else 
      e.Effect = DragDropEffects.None; 
    } 
    private void DragDrop_DragDrop(object sender, DragEventArgs e) 
    { 
     Label target = (Label)sender; 
     Label source = (Label)e.Data.GetData(DataFormatName); 
     string tmp = target.Text; 
     target.Text = source.Text; 
     source.Text = tmp; 
    } 

}