1. 程式人生 > >treeview節點的新增和刪除

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
以上的程式碼,都經過多次測試通過,應該沒問題!