2012-12-10 28 views
1

我有兩個TreeView這是在不同的形式。Treeview拖放沒有目標節點

  • treeView1
  • treeView2

我實現了一個Drag and Drop功能,這樣我可以從樹上拖動到另一個和它正常工作與我發現here,我要處理3個事件的代碼。

的事情是我的窗戶的設置是這樣的:

enter image description here

正如你所看到的,Window2隱藏我的Window1它的目的和需要保持這樣的。問題是我的Drag and Drop是從Window2Window1所以我不能指定一個目標節點。有沒有辦法簡單地放入TreeView沒有任何目標節點,並說創建一個父節點旁邊的其他人?


鏈接死的例子並不:既forms

private void Form1_Load(object sender, System.EventArgs e) 
{ 
    this.treeView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag); 
    this.treeView2.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag); 
    this.treeView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter); 
    this.treeView2.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView_DragEnter); 
    this.treeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop); 
    this.treeView2.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView_DragDrop); 
} 

private void treeView_ItemDrag(object sender, 
     System.Windows.Forms.ItemDragEventArgs e) 
{ 
    DoDragDrop(e.Item, DragDropEffects.Move); 
} 

private void treeView_DragEnter(object sender, 
     System.Windows.Forms.DragEventArgs e) 
{ 
    e.Effect = DragDropEffects.Move; 
} 

private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) 
{ 
    TreeNode NewNode; 

    if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false)) 
    { 
     Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y)); 
     TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt); 
      NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode"); 
     if(DestinationNode.TreeView != NewNode.TreeView) 
     {  
      DestinationNode.Nodes.Add((TreeNode) NewNode.Clone()); 
      DestinationNode.Expand(); 
      //Remove Original Node 
      NewNode.Remove(); 
     } 
    } 
} 
+0

如果無法看到目標樹視圖,你怎麼能調用它是一滴?而是使用右鍵單擊菜單? – Bolu

+1

將它放在窗口1上,然後讓它處理TreeView1。這是否是世界上最不直觀的界面競爭? –

+0

@Bolu我很抱歉我的錯誤。樹形視圖在底部可見。我唯一看不見的是treeview1中的樹節點,這就是爲什麼我不能選擇一個目標節點。 – phadaphunk

回答

2

更改treeview_dragdrop以下幾點:

private void treeView_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) 
    { 
     TreeNode NewNode; 

     if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false)) 
     { 
      NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode"); 
      if (!(sender as TreeView).Nodes.Contains(NewNode))//Edit: add this if you don't want to add the same one again. 
      {  
       (sender as TreeView).Nodes.Add((TreeNode) NewNode.Clone());     
       NewNode.Remove(); //Edit: add this if you want to remove original one. 
      } 
     } 
    } 
+0

謝謝你很多完美的作品 – phadaphunk