タイトル : 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 |