2011-01-18 2 views
-2
private CTreeNode GetParentNode(CTreeNode node) 
    { 
     CTreeNode cTreeNode; 
     TreeNode[] nodes = this.treeview.Nodes.Find(node.Name, true); 
     if (nodes[0].Parent == null) 
     cTreeNode = nodes[0] as CTreeNode; 
     else 
     { 
     cTreeNode = nodes[0].Parent as CTreeNode; 
     CTreeNode.Nodes.Clear(); 
     cTreeNode.Nodes.Add(nodes[0] as CTreeNode); 
     this.GetParentNode(cTreeNode); 
     } 

     return cTreeNode; 
    } 

это функция, которая предназначена, чтобы получить узел, как (если а содержит Ь, с и б содержит г и д,же проблема с TreeView

a--b--d 
    --e 
--c 

, если д передается к этому функция возвращает узел, который является a, но a имеет b, а b имеет d a--b--d).

но когда я передаю d этой функции, возвращается только b узел.

Когда я отлаживаю и вижу, линия переключается между функцией возврата и this.GetParentNode (customTreeNode);

я Доно, почему, я думаю, им не хватает некоторых основы

может я знаю, почему ..

+1

Почему вы клоо нин? Это не имеет никакого смысла ... – leppie

+0

, если я добавлю его напрямую, он не добавляется. теперь проверьте код .. снова существует проблема – curiosity

+1

Если вы не вернетесь из 'this.GetParentNode (cTreeNode);'? Я не понимаю, в чем проблема. Просьба уточнить. – leppie

ответ

1

Похоже, вы пытаетесь построить путь УЗЕЛ

CTreeNode[] nodes = this.treeview.Nodes.Find(node.Name, true); 
List<CTreeNode> nodepath = new List<CTreeNode>(); 
GetNodePath(nodes[0], nodepath); 

private void GetNodePath(CTreeNode node, List<CTreeNode> nodepath) { 
    nodepath.Add(node); 
    if (node.Parent != null) { 
     GetNodePath(node.Parent, nodepath); 
    } 
} 

EDIT

Исправленный код

+1

Правильно или нет, OP может запутаться, когда компилятор ошибается, поскольку присутствует 'return'. –

+0

спасибо за место – djeeg

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