tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
TreeViewのノードの表示順の保存(VB6.0) ( No.0 )  [親スレッドへ]
日時: 2011/03/23 10:59
名前: 花ちゃん

***********************************************************************************
* カテゴリー:[ツリービュー][][]                                                  *
* キーワード:ノード,TreeView1.Nodes,階層構造,インデックス順,ループ処理,          *
***********************************************************************************
タイトル : TreeViewのノードの保存
記 事 No : 14888
投 稿 日 : 2010/09/02(Thu) 10:07
元質問者 : ima  

ノード全体(階層構造)を、画面に表示されている順で保存したいのです。 
しかし、下記のコードでは、各ノード作成時のインデックス順?にリストアップされるためか、
ノードの位置を上下に移動させた状況が反映されません。
    For Each nod In TreeView1.Nodes
        Debug.Print nod.Text
    Next
-----------------------------------------------------------------------------------
記事No : 14889
投稿日 : 2010/09/02(Thu) 12:11
回答者 : 魔界の仮面弁士  
-----------------------------------------------------------------------------------
詳しくは、記事No:14888 〜 の一連の投稿をご覧ください。

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






 [スレッド一覧へ] [親スレッドへ]