treeview節點的新增和刪除
Dim text As String
Dim sk As String
Dim flag As Integer
Public nod As Node
Public obj As TreeView
Private Sub Form_Load()
TreeView1.Nodes.Add , , "root", "root"
' TreeView1.Appearance = cc3D
TreeView1.Nodes.Add "root", tvwChild, "key1", "jiedian1"
TreeView1.Nodes.Add "root", tvwChild, "key2", "jiedian2"
' TreeView1.Nodes.Add "root", tvwChild, "key3", "jiedian3"
TreeView1.Nodes.Add "key1", tvwChild, "key5", "jiedian5"
TreeView1.Nodes.Add "key1", tvwChild, "key8", "jiedian8"
TreeView1.Nodes.Add "key5", tvwChild, "key6", "jiedian6"
TreeView1.Nodes.Add "key2", tvwChild, "key9", "jiedian9"
TreeView1.Nodes.Add "key9", tvwChild, "key10", "jiedian10"
TreeView1.Nodes.Add "key2", tvwChild, "key7", "jiedian7"
TreeView1.Nodes.Add "key7", tvwChild, "key3", "jiedian3"
TreeView1.Nodes.Add "key10", tvwChild, "key4", "jiedian4"
TreeView1.Nodes.Add "key6", tvwChild, "key11", "jiedian11"
TreeView1.Nodes.Add "key8", tvwChild, "key12", "jiedian12"
TreeView1.Nodes.Add "key1", tvwChild, "key13", "jiedian13"
TreeView1.Nodes.Add "key3", tvwChild, "key14", "jiedian14"
TreeView1.Nodes.Add "key2", tvwChild, "key15", "jiedian15"
TreeView1.Nodes.Add "key15", tvwChild, "key16", "jiedian16"
' TreeView1.Name = "treeview"
End Sub
'關鍵程式碼
'整個新增節點的思路是按先序遍歷的
Private Sub tjnode(nodex As Node, obj As TreeView) '傳過來的是這棵子樹的第一個孩子節點
obj.Nodes.Add nodex.Parent.Key, tvwChild, nodex.Key, nodex.text '新增節點
If nodex.Key = nodex.Parent.Child.LastSibling.Key Then '如果該節點的關鍵字等於該節點父節點的最後一個孩子節點的關鍵字(也就是說該節點是該節點父節點的最後一個孩子節點)
Set nodex = nodex.Parent.Child.FirstSibling '如果這個節點已經是該節點父節點的最後一個孩子節點時,就令該節點返回到父節點的第一個孩子節點
For i = 0 To nodex.Parent.Children - 1 '順序從第一個孩子節點開始找有孩子節點的
If nodex.Children = 0 Then '如果該節點沒有孩子節點
If nodex.Children = 0 And nodex.Key = nodex.Parent.Child.LastSibling.Key Then '如果該節點沒有孩子節點,並且果該節點的關鍵字等於該節點父節點的最後一個孩子節點的關鍵字
Exit Sub ' 退出該過程
Else
Set nodex = nodex.Next '使節點移到兄弟節點的下一個
End If
Else
Set nodex = nodex.Child
tjnode nodex, obj
If nodex.Parent.Parent.Children = 1 Then
Set nodex = nodex.Parent
Else
Set nodex = nodex.Parent.Next
End If
End If
Next i
Else ' 該節點不是該節點父節點的最後一個孩子節點
Set nodex = nodex.Next
tjnode nodex, obj
End If
End Sub
Private Sub shanchu_Click() '刪除節點
If TreeView1.SelectedItem.Key <> "root" Then
If TreeView1.SelectedItem.Children = 0 Then
text = TreeView1.SelectedItem.text
sk = TreeView1.SelectedItem.Key
Text1.text = sk
TreeView1.Nodes.Remove TreeView1.SelectedItem.Index
flag = 0
shanchu.Enabled = False
tianjia.Enabled = True
Else
flag = 1
k = TreeView1.SelectedItem.Index
Dim nodx As Node
Set nod = TreeView2.Nodes.Add(, , TreeView1.SelectedItem.Key, TreeView1.SelectedItem.text)
Set nodx = TreeView1.SelectedItem.Child
Set obj = TreeView2
tjnode nodx, obj
TreeView1.Nodes.Remove k
shanchu.Enabled = False
tianjia.Enabled = True '使新增可用
End If
Else
MsgBox "不能刪除根節點"
End If
End Sub
Private Sub tianjia_Click() '新增節點
If flag = 0 Then '沒有子節點的節點
TreeView1.Nodes.Add TreeView1.SelectedItem.Key, tvwChild, sk, text
tianjia.Enabled = False
shanchu.Enabled = True
Else '刪除的節點還有子節點
TreeView1.Nodes.Add TreeView1.SelectedItem.Key, tvwChild, nod.Key, nod.text
Set obj = TreeView1
tjnode nod.Child, obj
If TreeView2.Nodes.Count <> 0 Then
TreeView2.Nodes.Remove 1
End If
tianjia.Enabled = False
shanchu.Enabled = True
End If
End Sub
Private Sub TreeView1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = vbRightButton Then
PopupMenu menu
End If
End Sub
以上的程式碼,都經過多次測試通過,應該沒問題!