2011-06-01 65 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; 
     }