Переместить узел вверх и вниз в TreeLIist

В моем проекте я пытаюсь создать пользовательский контроль в древовидном списке для перемещения узла вверх и вниз с помощью кнопок (вверх и вниз) и для того, чтобы сфокусированный узел всегда был виден в древовидном списке

C#

private void button1_Click(object sender, EventArgs e)
        {

            int LastNodeIndex = treeList1.GetNodeIndex(treeList1.Nodes.LastNode);
            int targetNodeIndex = treeList1.GetNodeIndex(treeList1.FocusedNode.PrevNode);

            if(targetNodeIndex==-1)
            {
                treeList1.SetNodeIndex(treeList1.FocusedNode, LastNodeIndex);
                treeList1.MakeNodeVisible(treeList1.FocusedNode);
            }
            else
            {
                int nodeIndex = treeList1.GetNodeIndex(treeList1.FocusedNode);
                treeList1.SetNodeIndex(treeList1.FocusedNode, targetNodeIndex);
                treeList1.MakeNodeVisible(treeList1.FocusedNode);
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            int targetNodeIndex = treeList1.GetNodeIndex(treeList1.FocusedNode.NextNode);
            int nodeIndex = treeList1.GetNodeIndex(treeList1.FocusedNode);
            treeList1.SetNodeIndex(treeList1.FocusedNode, targetNodeIndex);
            treeList1.MakeNodeVisible(treeList1.FocusedNode);

        }

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

если пользователь фокусируется на корневом узле и нажимает кнопку "вверх", то получает значение индекса последнего узла, используя этот индекс, я устанавливаю selectednode в положение "последний узел", даже если пользователь нажимает кнопку "вверх" от корневого узла, он перемещается на последний и делает этот узел видимым в древовидном списке.

Но если выбранный узел является первым дочерним узлом конкретного родителя, он не будет перемещаться к последнему ребенку при нажатии кнопки вверх. Как этого добиться? Возможно ли это сделать? Дайте некоторую идею, чтобы сделать это.

1 ответ

Решение

Я нахожу решение, Вот оно,

C#

if(treeList1.FocusedNode.ParentNode!=null && foucsednodeindex == 0) // check its child node or not
        {

          int parentnodeindex = treeList1.GetNodeIndex(treeList1.FocusedNode.ParentNode);

            int foucsedindex = treeList1.GetNodeIndex(treeList1.FocusedNode);

            treeList1.SetFocusedNode(treeList1.FocusedNode.ParentNode);

            int count = treeList1.FocusedNode.Nodes.Count;


            treeList1.SetFocusedNode(treeList1.FocusedNode.NextVisibleNode);

             treeList1.SetNodeIndex(treeList1.FocusedNode, count);
            treeList1.MakeNodeVisible(treeList1.FocusedNode);

        }
Другие вопросы по тегам