2017-12-16 6 views
1

treeview에서 노드의 키를 '보기 만'에 가져 오려고합니다.TreeView에서 모든 보이는 노드 얻기

다음은 예제입니다.

enter image description here

나는 재귀 적으로 모든 노드를 얻을 코드 아래 사용하고 있습니다. 예상대로 모든 노드 키를 반환합니다. 그러나 나는 treeview의보기에서만 그 열쇠를 얻을 필요가있다.

public void PrintNodesRecursive(UltraTreeNode oParentNode) 
{ 
    if (oParentNode.Nodes.Count == 0) 
    { 
     return; 
    } 
    foreach (UltraTreeNode oSubNode in oParentNode.Nodes) 
    { 
     MessageBox.Show(oSubNode.Key.ToString()); 
     PrintNodesRecursive(oSubNode); 
    } 
} 

private void ultraButton3_Click(object sender, EventArgs e) 
{ 
    PrintNodesRecursive(ultraTree1.Nodes[0]); 
} 

나는 다른 경로를 따라야하거나 코드를 재구성해야한다는 것을 모릅니다.

몇 시간 후에 방금 쌓았습니다. 도움이 필요합니다.

+1

Treenode의'.IsExpanded','.IsVisible','.NextVisibleNode','.PrevVisibleNode' 속성을 사용해 보셨습니까? (내가 그 질문을 정확하게 이해한다면). – Jimi

+0

@ 지미 이봐, 네, 다음에 보이는 노드를 시도하고 완벽하게 작동하지만 for 루프를 만들지 않았습니다. 어떻게하면 다음에 보이는 노드를 사용하여 모든 노드를 프로그래밍 방식으로 얻을 수 있습니까? –

답변

1

첫 번째 보이는 노드는 Nodes 컬렉션이고 IsVisible 속성은 Node입니다. 그런 다음 NextVisibleNode을 사용하여 TreeView에있는 다음 가시 노드를 찾는 재귀 적 방법을 만듭니다.

private void button1_Click(object sender, EventArgs e) 
{ 
    var visibleNodes = GetVisibleNodes(treeView1).ToList(); 
} 
public IEnumerable<TreeNode> GetVisibleNodes(TreeView t) 
{ 
    var node = t.Nodes.Cast<TreeNode>().Where(x => x.IsVisible).FirstOrDefault(); 
    while (node != null) 
    { 
     var temp = node; 
     node = node.NextVisibleNode; 
     yield return temp; 
    } 
} 

또 다른 옵션으로, 당신은 IsVisible 속성을 사용하여 다음 TreeView 등을 평평하게 Descendants 확장 방법에 의존 보이는 모든 노드를 얻을 수 있습니다.

+0

감사합니다. 너는 내 하루를 보냈다. 가까운 장래에 너처럼되고 싶다. –

+0

좋습니다! 천만에요. 연습 완벽하게 :) –

관련 문제