Переместить TreeNode вверх, вверх, вниз и вниз C#

У меня мало знаний о представлении дерева. Я хочу иметь возможность перемещать узел дерева вверх и перемещаться вверх по узлу дерева.

-Фрукты -Яблоки -Апельсины -Бананы -Арбузы

Ниже приведен код, который я пытаюсь реализовать.

Во-первых, я перемещаю арбуз наверх, все работает нормально. Затем, когда я попытаюсь продвинуться вверх по бананам, индекс бананов покажет -1. Есть ли что-то еще, что я делаю неправильно?

    private void moveTopToolStripMenuItem_Click(object sender, EventArgs e)
    {
        TreeNode tv = new TreeNode();
        TreeNode selectedNodeToMove = new TreeNode();

        try
        {
            TreeNode parent = treeView.SelectedNode.Parent;

            selectedNodeToMove = treeView.SelectedNode;

            if (parent != null)
            {
                parent.Nodes.Remove(treeView.SelectedNode);
                parent.Nodes[0] = selectedNodeToMove;
            }
        }

        catch (Exception ex)
        {

        }
    }

    private void moveUpToolStripMenuItem_Click(object sender, EventArgs e)
    {
        TreeNode tv                 = new TreeNode();
        TreeNode selectedNodeToMove = new TreeNode();

        try
        {
            TreeNode parent = treeView.SelectedNode.Parent;

            selectedNodeToMove = treeView.SelectedNode;

            if (parent != null)
            {
                int index = parent.Nodes.IndexOf(treeView.SelectedNode);

                if (index > 0)
                {
                    tv = parent.Nodes[index - 1];

                    parent.Nodes.Remove(treeView.SelectedNode);
                    parent.Nodes.Remove(tv);
                    parent.Nodes.Insert(index - 1, selectedNodeToMove);
                    parent.Nodes.Insert(index, tv);
                }
            }
        }

        catch (Exception ex)
        {

        }
    }

person missypooh    schedule 14.07.2016    source источник


Ответы (1)


мне удается выйти с ответом, и он работает. Просто хочу поделиться, если кто-то смотрит на это.

    private void moveTopToolStripMenuItem_Click(object sender, EventArgs e)
    {
        TreeNode selectedNodeToMove = new TreeNode();

        try
        {
            int index           = -1;
            TreeNode parent     = treeView.SelectedNode.Parent;
            TreeNode node= this.treeView.SelectedNode.Clone() as TreeNode;

            if (parent != null)
            {
                for (int j = 0; j < this.treeView.SelectedNode.Parent.Nodes.Count; j++)
                {
                    if (this.treeView.SelectedNode == this.treeView.SelectedNode.Parent.Nodes[j])
                    {
                        index = j;
                        break;
                    }
                }

                this.treeView.BeginUpdate();
                this.treeView.SelectedNode.Parent.Nodes.Insert(0, node);
                this.treeView.SelectedNode.Parent.Nodes.RemoveAt(index + 1);
                this.treeView.EndUpdate();

                this.treeView.SelectedNode = node;
                this.treeView.Select();

            }

        }

        catch (Exception ex)
        {

        }
    }

    private void moveUpToolStripMenuItem_Click(object sender, EventArgs e)
    {
        TreeNode tv                 = new TreeNode();
        TreeNode selectedNodeToMove = new TreeNode();

        try
        {
            TreeNode parent= treeView.SelectedNode.Parent;
            TreeNode node= this.treeView.SelectedNode.Clone() as TreeNode;

            if (parent != null)
            {
                int index = -1;

                for (int j = 0; j < parent.Nodes.Count; j++)
                {
                    if (this.treeView.SelectedNode == parent.Nodes[j])
                    {
                        index = j;
                        break;
                    }
                }

                this.treeView_.BeginUpdate();
                this.treeView.SelectedNode.Parent.Nodes.Insert(index - 1, node);
                this.treeView.SelectedNode.Parent.Nodes.RemoveAt(index + 1);
                this.treeView.EndUpdate();

                this.treeView.SelectedNode = node;
                this.treeView.Select();
        }

        catch (Exception ex)
        {
        }
    }

    private void moveDownToolStripMenuItem_Click(object sender, EventArgs e)
    {
        TreeNode tv                 = new TreeNode();
        TreeNode selectedNodeToMove = new TreeNode();

        try
        {
            TreeNode parent = treeView.SelectedNode.Parent;
            TreeNode node = this.treeView.SelectedNode.Clone() as TreeNode;
            selectedNodeToMove = treeView.SelectedNode;

            if (parent != null)
            {
                int index = -1;

                for (int j = 0; j < parent.Nodes.Count; j++)
                {
                    if (this.treeView.SelectedNode == parent.Nodes[j])
                    {
                        index = j;
                        break;
                    }
                }

                this.treeView.BeginUpdate();
                this.treeView.SelectedNode.Parent.Nodes.RemoveAt(index);
                this.treeView.SelectedNode.Parent.Nodes.Insert(index + 1, node);
                this.treeView.EndUpdate();

                this.treeView.SelectedNode = node;
                this.treeView.Select();

        }

        catch (Exception ex)
        {

        }
    }

    private void moveBottomToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            TreeNode parent = treeView.SelectedNode.Parent;
            TreeNode node  = this.treeView.SelectedNode.Clone() as TreeNode;

            if (parent != null)
            {
                int index = -1;

                for (int j = 0; j < parent.Nodes.Count; j++)
                {
                    if (this.treeView.SelectedNode == parent.Nodes[j])
                    {
                        index = j;
                        break;
                    }
                }

                if (index != parent.Nodes.Count - 1)
                {
                    this.treeView.BeginUpdate();
                   this.treeView.SelectedNode.Parent.Nodes.Insert(parent.Nodes.Count, node);
                    this.treeView.SelectedNode.Parent.Nodes.RemoveAt(index);
                    this.treeView.EndUpdate();

                    this.treeView.SelectedNode = node;
                    this.treeView.Select();
        }

        catch (Exception ex)
        {

        }
    }
person missypooh    schedule 19.07.2016