2012-06-13 3 views
0

enter image description hereперемещаться по TreeView назад

Я хотел бы двигаться в обратном направлении - позволяет говорить в чат узел «Backgrounds». Затем я хочу переместить:

->backgrounds 
->component 6 
->components 
->assembly 3 
->component 5 
->component 4 
->components 
->assembly 2 
->component 3 
... 

Может кто-нибудь мне помочь.

+0

Вы хотите перейти к последнему узлу в дереве (обернуть) или переместить узел в конец? – hometoast

+0

Ну, я хочу проверить некоторые значения каждого «backwords» как фильтрацию. – santBart

+0

А, так что вы хотите, на основе рисунка, перейти от «Фоны» к «Компоненту 6»? – hometoast

ответ

1

Поскольку мой комментарий был полезным, я отправляю этот ответ.

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

public void traverse(TreeNode t) 
{ 
    for (int i = t.Nodes.Count-1; i >= 0; i--) 
    { 
     traverse(t.Nodes[i]); 
    } 
    /*Do something*/ 
} 

Вы можете прочитать больше о методах обхода дерева здесь: Tree traversal

+0

У меня есть еще один дополнительный вопрос. Я хочу проверить каждый узел моего дерева, который они удовлетворяют некоторым условиям. Что делать, если я хочу запустить его с одного из узлов, который находится внутри древовидного изображения, но проверить условие для всех «выше» узлов. Как и в первом сообщении, например, начальный узел - это «Фоны». – santBart

+0

@santBart. Простое решение было бы просто ничего не делайте, пока не достигнете узла, с которого вы хотите начать. В противном случае вам придется каким-то образом изменить алгоритм, чтобы начать с нужного вам узла, а затем выяснить следующий узел, который нужно посетить, и повторить это, пока вы не закончите. не совсем уверен, как вы можете это сделать эффективно. – MAV

1

Это встроенная возможность, вы можете использовать свойство TreeNode.PrevVisibleNode. Например:

private void MoveUp_Click(object sender, EventArgs e) { 
     var node = treeView1.SelectedNode; 
     if (node != null && node.PrevVisibleNode != null) 
      treeView1.SelectedNode = node.PrevVisibleNode; 
     treeView1.Focus(); 
    } 
+0

работает только в том случае, если все узлы расширены. Я не уверен, что пользователь сделает это. – santBart

Смежные вопросы