ヘッダー

VB.NET2002対応 VB.NET2003対応 VB2005対応

 

子ノード以下の全ノードを取得する

参照:TreeViewの基礎用語

 

以下のメソッド GetAllNodes を使用すると子ノード以下のすべてのノードを含んだ コレクションを取得できる。

VB2005対応

'■GetAllNodes
'''
<summary>子ノードも含んだすべてのノードを取得する
</summary>
''' <param name="Nodes">トップレベルのNodes。例:TreeView1.Nodes</param>
''' <returns>すべてのNodeを含んだコレクション。</returns>
Private Function GetAllNodes(ByVal Nodes As TreeNodeCollection) As Generic.List(Of TreeNode)

    Dim Ar As New Generic.List(Of TreeNode)
    Dim Node As TreeNode

    For Each Node In Nodes
        Ar.Add(Node)
        If Node.GetNodeCount(False) > 0
Then
           
Ar.AddRange(GetAllNodes(Node.Nodes))
        End
If
   
Next

    Return Ar

End Function

 

上記メソッドと同じ内容だが、VB.NET2002およびVB.NET2003に対応したもの。

VB.NET2002対応 VB.NET2003対応 VB2005対応

'■GetAllNodes
''' <summary>子ノードも含んだすべてのノードを取得する</summary>
''' <param name="Nodes">トップレベルのNodes。例:TreeView1.Nodes</param>
''' <returns>すべてのNodeを含んだコレクション</returns>
Private Function GetAllNodes(ByVal Nodes As TreeNodeCollection) As ArrayList

    Dim Ar As New ArrayList
    Dim Node As TreeNode

    For Each Node In Nodes
        Ar.Add(Node)
        If Node.GetNodeCount(False) > 0
Then
           
Ar.AddRange(GetAllNodes(Node.Nodes))
        End
If
   
Next

    Return Ar

End Function

 

使用例:

以下の例の実行結果(ノードの展開は手動)

 

VB.NET2002対応 VB.NET2003対応 VB2005対応

'▼ノードを追加して適当なツリーを構成する。

TreeView1.Nodes.Add("ルートA")
TreeView1.Nodes(0).Nodes.Add(
"子ノードA-1")
TreeView1.Nodes(0).Nodes.Add(
"子ノードA-2")
TreeView1.Nodes(0).Nodes(1).Nodes.Add(
"孫ノードA-2-1")
TreeView1.Nodes(0).Nodes(1).Nodes.Add(
"孫ノードA-2-2")
TreeView1.Nodes(0).Nodes.Add(
"子ノードA-3")
TreeView1.Nodes.Add(
"ルートB")
TreeView1.Nodes.Add(
"ルートC")
TreeView1.Nodes(2).Nodes.Add(
"子ノードC-1")
TreeView1.Nodes(2).Nodes.Add(
"子ノードC-2")

'▼全ツリーを対象にノードの一覧をListBoxに表示する。

Dim Node As TreeNode

For Each Node In GetAllNodes(TreeView1.Nodes)
    ListBox1.Items.Add(Node.Text)
Next