Повторный выбор узла Treeview - PullRequest
0 голосов
/ 16 февраля 2012

Я работаю над компактным фреймворком 2.0 и использую c #.У меня проблема с повторным выбором узла дерева.Сценарий выглядит так: temp0 temp1 temp2 temp3 У меня есть какой-то узел в виде дерева и использующий стрелки вверх и вниз для перемещения узла вверх и вниз.но проблема в том, что как только я выбираю узел и нажимаю стрелку вверх, узел перемещается вверх, и я не могу выбрать узел чуть ниже этого узла.Предположим, я выбираю temp3 и нажимаю стрелку вверх, этот temp3 заменяется на temp2.например: temp0 temp1 temp3 temp2 после этого я не могу выбрать temp2, но могу выбрать temp3 и другой узел независимо от того, что работает.


Я использую этот код для стрелки вверх:

int paramPos = this.treeView1.SelectedNode.Index;

if (paramPos> 0)

{

System.Windows.Forms.TreeNode tempNode = this.treeView1.SelectedNode;

this.treeView1.Nodes [paramPos] = this.treeView1.Nodes [paramPos - 1];

this.treeView1.Nodes [paramPos - 1] = tempNode;

this.treeView1.SelectedNode = this.treeView1.Nodes [paramPos - 1];

foreach (узел системы.Windows.Forms.TreeNode в узле this.treeView1.Nodes)

{

ArgumentNumberInfo ai = (ArgumentNumberInfo) tnode.Tag;

ai.ArgNo = tnode.Index + 1;

}

                  treeView1.SelectedNode = tempNode;
                  this.treeView1_AfterSelect(null, null);


            }
        }

После нажатия стрелки вверх узел переходит ввверх, но я не могу выбрать узел ниже этого.Node0

node1

node2

node3

Если вы выберете node3 и нажмете стрелку вверх, то node3 поднимется, а node2 опустится, но вы не можетеt выберите узел2.пожалуйста, дайте мне понять, почему это происходит.Спасибо за ваше время.

1 Ответ

1 голос
/ 24 февраля 2012

Узлы Treeview поддерживаются внутренним связанным списком.Я думаю, что метод, который вы используете для обмена ими, сбивает с толку этот связанный список.Вот часть кода, на которую я ссылаюсь:

System.Windows.Forms.TreeNode tempNode = this.treeView1.SelectedNode;
this.treeView1.Nodes[paramPos] = this.treeView1.Nodes[paramPos - 1];
this.treeView1.Nodes[paramPos - 1] = tempNode;

Вместо приведенного выше кода попробуйте следующее:

System.Windows.Forms.TreeNode tempNode = this.treeView1.SelectedNode;
this.treeView1.Remove(tempNode);
this.treeView1.Insert(paramPos - 1, tempNode);
...