tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: TreeViewのノードの保存
投稿日: 2010/09/02(Thu) 12:11
投稿者魔界の仮面弁士
# コード修正

> 画面に表示されている順、そのままでリストアップするには
> どうすればよいでしょうか?

For Each で列挙するのではなく、各ノードの親子兄弟関係を元に Loop 処理しましょう。
基本的には、Next と Child を再起処理すれば列挙できるはずです。

          Root プロパティ:最上位ノードを返す(最上位が複数いる場合はその中の長兄)
        Parent プロパティ:    親ノードを返す(自身が最上位ノードの場合は Nothing)
      Previous プロパティ:  兄者ノードを返す(自身が長兄の場合は Nothing)
          Next プロパティ:  弟者ノードを返す(自身が末弟の場合は Nothing)
  FirstSibling プロパティ:  長兄ノードを返す(自身が長兄の場合は自ノード)
   LastSibling プロパティ:  末弟ノードを返す(自身が末弟の場合は自ノード)
         Child プロパティ:  長子ノードを返す(子が居ない場合は Nothing)

なお Root プロパティだけは、自身の階層位置とは無関係です。


Option Explicit

Private Sub Form_Load()
    List1.Font.Name = "MS ゴシック"
    List1.Font.Size = 12
  
    Dim d As Collection
    Set d = New Collection
    
    d.Add TreeView1.Nodes.Add(Key:="N1", Text:="N1"), "N1"
    d.Add TreeView1.Nodes.Add(Key:="N2", Text:="N2"), "N2"
    d.Add TreeView1.Nodes.Add(Key:="N3", Text:="N3"), "N3"
    d.Add TreeView1.Nodes.Add(Key:="N4", Text:="N4"), "N4"
    d.Add TreeView1.Nodes.Add(Key:="N1-1", Text:="N1-1"), "N1-1"
    d.Add TreeView1.Nodes.Add(Key:="N1-2", Text:="N1-2"), "N1-2"
    d.Add TreeView1.Nodes.Add(Key:="N1-3", Text:="N1-3"), "N1-3"
    d.Add TreeView1.Nodes.Add(Key:="N1-4", Text:="N1-4"), "N1-4"
    d.Add TreeView1.Nodes.Add(Key:="N3-1", Text:="N3-1"), "N3-1"
    d.Add TreeView1.Nodes.Add(Key:="N1-2-1", Text:="N1-2-1"), "N1-2-1"
    d.Add TreeView1.Nodes.Add(Key:="N1-2-2", Text:="N1-2-2"), "N1-2-2"
    d.Add TreeView1.Nodes.Add(Key:="N1-4-1", Text:="N1-4-1"), "N1-4-1"
    
    Set d("N1-4").Parent = d("N1")
    Set d("N1-3").Parent = d("N1")
    Set d("N1-2").Parent = d("N1")
    Set d("N1-1").Parent = d("N1")
    
    Set d("N3-1").Parent = d("N3")
    
    Set d("N1-2-2").Parent = d("N1-2")
    Set d("N1-2-1").Parent = d("N1-2")
    
    Set d("N1-4-1").Parent = d("N1-4")
    
    TreeView1_NodeClick d(1)
End Sub

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
    List1.Clear
    If Node Is Nothing Then Exit Sub
    List1.AddItem "        Root - " & GetText(Node.Root)
    List1.AddItem "      Parent - " & GetText(Node.Parent)
    List1.AddItem "    Previous - " & GetText(Node.Previous)
    List1.AddItem "        Next - " & GetText(Node.Next)
    List1.AddItem "FirstSibling - " & GetText(Node.FirstSibling)
    List1.AddItem " LastSibling - " & GetText(Node.LastSibling)
    List1.AddItem "       Child - " & GetText(Node.Child)
End Sub

Function GetText(ByVal n As Node) As String
    If n Is Nothing Then
        GetText = "(nothing)"
    Else
        GetText = n.Key
    End If
End Function

Sub DumpNextNode(ByVal target As Node, ByVal level As Integer)
    If target Is Nothing Then
        Exit Sub
    Else
        Debug.Print Tab(level); target.Key
    End If
    DumpNextNode target.Child, level + 1
  DumpNextNode target.Next, level
End Sub

Private Sub Command1_Click()
    If TreeView1.Nodes.Count = 0 Then
        Exit Sub
    Else
        Debug.Print "----"
        DumpNextNode TreeView1.Nodes(1).Root, 1
    End If
End Sub

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。