Как можно перемещаться вверх и вниз выбранного элемента программно в древовидной структуре в C #?

2

У меня есть одно дерево и 2 кнопки я хочу, когда нажимают на UP_button, выше Node, если я нажимаю на кнопку DOWN_button, тогда выбор должен быть вниз

  • 0
    ваше дерево подключается к базе данных?
Теги:
treeview

5 ответов

0

Для ASP.NET Treeview:

    /// <summary>
    /// MoveComponentUpLinkButton_Click
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void MoveComponentUpLinkButton_Click(object sender, EventArgs e)
    {
        // Get the selected node
        TreeNode sourceNode = this.MyTreeview.SelectedNode;
        if (sourceNode != null)
        {
            // Get the selected node parent
            TreeNode parentNode = this.MyTreeview.SelectedNode.Parent;
            if (parentNode != null)
            {
                int index = -1;

                // For each node in selected nodes parent
                for (int j = 0; j < parentNode.ChildNodes.Count; j++)
                {
                    // If we found the selected node
                    if (sourceNode == parentNode.ChildNodes[j])
                    {
                        // save index
                        index = j;
                        break;
                    }
                }

                // If node is not already at top of list
                if (index > 0)
                {
                    // Move it up
                    parentNode.ChildNodes.RemoveAt(index);
                    parentNode.ChildNodes.AddAt(index - 1, sourceNode);
                    sourceNode.Selected = true;
                }
            }
        }
    }

    /// <summary>
    /// MoveComponentDownLinkButton_Click
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void MoveComponentDownLinkButton_Click(object sender, EventArgs e)
    {
        // Get the selected node
        TreeNode sourceNode = this.MyTreeview.SelectedNode;
        if (sourceNode != null)
        {
            // Get the selected node parent
            TreeNode parentNode = this.MyTreeview.SelectedNode.Parent;
            if (parentNode != null)
            {
                int index = -1;

                // For each node in selected nodes parent
                for (int j = 0; j < parentNode.ChildNodes.Count; j++)
                {
                    // If we found the selected node
                    if (sourceNode == parentNode.ChildNodes[j])
                    {
                        // save index
                        index = j;
                        break;
                    }
                }

                // If node is not already at botton of list
                if (index < parentNode.ChildNodes.Count - 1)
                {
                    // Move it down
                    parentNode.ChildNodes.RemoveAt(index);
                    parentNode.ChildNodes.AddAt(index + 1, sourceNode);
                    sourceNode.Selected = true;
                }
            }
        }
    }
0

моя проблема решена.
спасибо за ответы

private void button1_Click(object sender, EventArgs e)
{
  TreeNode node = new TreeNode();
  node = treeView1.SelectedNode;
  treeView1.SelectedNode = node.NextVisibleNode;
  node.TreeView.Focus();
}
  • 0
    Отлично, но как насчет принятия одного из ответов в качестве принятого решения?
  • 0
    я даю вам первый ответ, спасибо Торстен-Диттмар
0

Есть несколько полезных встроенных свойств node, которые вы можете использовать, поэтому для использования вы должны использовать:

TreeView.SelectedNode = TreeView.SelectedNode.PrevNode;

и для down:

TreeView.SelectedNode = TreeView.SelectedNode.NextNode;
  • 0
    Спасибо за ответ. Я решаю свою проблему с помощью частного void button1_Click (отправитель объекта, EventArgs e) {TreeNode node = new TreeNode (); node = treeView1.SelectedNode; treeView1.SelectedNode = node.NextVisibleNode; node.TreeView.Focus (); }
0

От Документация MSDN:

private void SelectNode(TreeNode node)
{
    if(node.IsSelected)
    {
        // Determine which TreeNode to select.
        switch(myComboBox.Text)
        {
            case "Previous":
                node.TreeView.SelectedNode = node.PrevNode;
                break;
            case "PreviousVisible":
                node.TreeView.SelectedNode = node.PrevVisibleNode;
                break;
            case "Next":
                node.TreeView.SelectedNode = node.NextNode;
                break;
            case "NextVisible":
                node.TreeView.SelectedNode = node.NextVisibleNode;
                break;
            case "First":
                node.TreeView.SelectedNode = node.FirstNode;
                break;
            case "Last":
                node.TreeView.SelectedNode = node.LastNode;
                break;
        }
    }
    node.TreeView.Focus();
}

ИЗМЕНИТЬ
Разумеется, вы должны использовать случаи для "Предыдущие" и "Следующий" или "Предыдущие" и "NextVisible" в обработчиках кликов. Этот код предполагает, что вы выбираете "действие" из поля со списком и нажимаете кнопку.

РЕДАКТИРОВАТЬ 2
На всякий случай, когда вы пытаетесь переместить узлы вверх и вниз (а не выбор), вы можете использовать что-то вроде следующего:

TreeNode sourceNode = treeView.SelectedNode;

if (sourceNode.Parent == null)
{
    return;
}

treeView.Nodes.Remove(sourceNode);
treeView.Nodes.Insert(sourceNode.Index + 1, sourceNode);

Это приведет к перемещению текущего node вниз. Обратите внимание, что вам нужно написать еще один код для обработки некоторых особых случаев (например, что происходит с первым node? Он работает на всех уровнях дерева?), Но в основном это то, что я попробую.

  • 0
    он не хочет выбирать, он хочет перемещать узлы вверх и вниз!
  • 0
    Нет, он / она говорит: «нажмите на UP_buutten, выше выбранного узла». Если он / она хочет переместить узлы, вопрос должен быть перефразирован.
0

попробуйте это для UP:

    private void btnUP_Click(object sender, EventArgs e)
    {
        var tn = tv.SelectedNode;
        if(tn==null) return;

        var idx = tn.Index;
        txt.Text = "Node: " + idx;

        var par = tn.Parent;

        if(par==null) return;

        par.Nodes.Remove(tn);

        if (idx > 0)
        {
            par.Nodes.Insert(tn.Index - 1, tn);
            return;
        }

        //if you want to move int its parent parent [grand parent :) ]
        if (par.Parent!=null)
            par.Parent.Nodes.Add(tn);
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню