2017-12-16 26 views
1

ツリービューでノードのキーを「表示のみ」にしたいとします。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; 
    } 
} 

、あなたはTreeViewを平らにしてからIsVisibleプロパティを使用して、すべての可視ノードを取得するためにDescendants拡張メソッドに依存することができます。

+0

ありがとうございます。あなたは私の一日を作った。私は近い将来、あなたのようになりたいです。 –

+0

素晴らしい!どういたしまして。練習は完璧になります:) –

関連する問題