2011-06-01 74 views

回答

1
void MoveNodeUp(TreeNode node) 
{ 
    TreeNode parentNode = node.Parent; 
    int originalIndex = node.Index; 
    if (node.Index == 0) return; 
    TreeNode ClonedNode = (TreeNode)node.Clone(); 
    node.Remove(); 
    parentNode.Nodes.Insert(originalIndex - 1, ClonedNode); 
    parentNode.TreeView.SelectedNode = ClonedNode; 
    } 
+2

爲什麼要克隆的節點?刪除不應該處理它,所以引用仍然有效。 – JMcCarty 2011-06-01 16:31:31

+0

@JMcCarty - 修正了它 – 2016-04-22 13:59:33

4

您需要操縱TreeView的Nodes集合。見TreeNodeCollection

如果你有三個樹節點,你要移動的最後一個前面,例如:(注:未測試的代碼,但給出了這個概念)

var lastNode = MyTreeView.Nodes[2]; 
MyTreeView.Nodes.Remove(lastNode); 
MyTreeView.Nodes.Insert(0, lastNode); 
1

這就是我已寫:

public void MoveNode(TreeView tv, TreeNode node, bool up) 
    { 

     if ((node.PrevNode == null) && up) { 
      return; 
     } 

     if ((node.NextNode == null) && !up) { 
      return; 
     } 

     int newIndex = up ? node.Index - 1 : node.Index + 1; 

     var nodes = tv.Nodes; 
     if (node.Parent != null) { 
      nodes = node.Parent.Nodes; 
     } 

     nodes.Remove(node); 
     nodes.Insert(newIndex, node); 

    } 
0

我寫了這個代碼,不需要任何克隆。

對於我的情況下,它向上移動一個位置在兄弟節點,但可以適應

 TreeNode selectedNode = treeViewChain.SelectedNode; 
     if (selectedNode != null && selectedNode.Index > 0) 
     { 
      TreeNode parent = selectedNode.Parent; 
      int selectedIndex = selectedNode.Index; 
      selectedNode.Remove(); 
      parent.Nodes.Insert(selectedIndex - 1, selectedNode); 
      treeViewChain.SelectedNode = selectedNode; 
     }