如何更改treenodes的顺序

时间:2011-06-01 14:54:24

标签: c#

我想在同一级别更改System.Windows.Forms.TreeNodes的顺序。

有关如何在.net-2.0中完成此操作的任何建议。

4 个答案:

答案 0 :(得分:4)

您需要操纵TreeView的Nodes集合。请参阅TreeNodeCollection

如果你有三个树节点,并且你想将最后一个节点移到前面,例如:(注意:没有经过测试的代码,但显示了这个想法)

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

答案 1 :(得分: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 :(得分: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); 

    }

答案 3 :(得分: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;
        }