'删除子药结点 Public Sub DeleteSubNode(dNode As Node) Dim tNode As Node If dNode.Children > 0 Then Do While Not dNode.Child Is Nothing TreeView1.Nodes.Remove dNode.Child.Index Loop End If End Sub删除任意 TreeView1.Nodes.Remove tNode.index 'tNode为任意一结点
tvwTest.Nodes.Add , , "A2", "A2" End Sub'删除结点: Public Sub UpdateTreeview(DeleteNode As Node) Dim tNode As Node Dim tSTR As String, strCount As String Dim i As Long If DeleteNode.Next Is Nothing Then Exit Sub
Set tNode = DeleteNode.Next Do While Not tNode Is Nothing strCount = "" For i = Len(tNode.Text) To 1 Step -1 tSTR = Mid(tNode.Text, i, 1) If tSTR = "." Then Exit For End If strCount = tSTR & strCount Next If strCount = tNode.Text Then '说明是顶级 tNode.Text = Mid(strCount, 1, 1) & (CLng(Mid(strCount, 2)) - 1) Else tNode.Text = tNode.Parent.Text & "." & (CLng(strCount) - 1) End If If tNode.Children > 0 Then UpdateSubNode tNode End If Set tNode = tNode.Next Loop Set tNode = Nothing tvwTest.Nodes.Remove DeleteNode.Index End Sub'更新子结点: Private Sub UpdateSubNode(ParentNode As Node) Dim tNode As Node Set tNode = ParentNode.Child Do While Not tNode Is Nothing tNode.Text = ParentNode.Text & Mid(tNode.Text, Len(ParentNode.Text) + 1) If tNode.Children > 0 Then UpdateSubNode tNode End If Set tNode = tNode.Next Loop Set tNode = Nothing End Sub
插入一个node的代码我正在测试中,呵呵呵Private Sub CreateTreeview() Dim tNode As Node Set tNode = tvwTest.Nodes.Add(, , "A0", "A0") tNode.Expanded = True tvwTest.Nodes.Add "A0", tvwChild, "A0.0", "A0.0" tvwTest.Nodes.Add "A0", tvwChild, "A0.1", "A0.1"
tvwTest.Nodes.Add , , "A2", "A2" End Sub'删除结点: Public Sub UpdateTreeview(DeleteNode As Node) Dim tNode As Node Dim tSTR As String, strCount As String Dim i As Long If DeleteNode.Next Is Nothing Then Exit Sub
Set tNode = DeleteNode.Next Do While Not tNode Is Nothing strCount = "" For i = Len(tNode.Text) To 1 Step -1 tSTR = Mid(tNode.Text, i, 1) If tSTR = "." Then Exit For End If strCount = tSTR & strCount Next If strCount = tNode.Text Then '说明是顶级 tNode.Text = Mid(strCount, 1, 1) & (CLng(Mid(strCount, 2)) - 1) Else tNode.Text = tNode.Parent.Text & "." & (CLng(strCount) - 1) End If If tNode.Children > 0 Then UpdateSubNode tNode End If Set tNode = tNode.Next Loop Set tNode = Nothing tvwTest.Nodes.Remove DeleteNode.Index End Sub'更新子结点: Private Sub UpdateSubNode(ParentNode As Node) Dim tNode As Node Set tNode = ParentNode.Child Do While Not tNode Is Nothing tNode.Text = ParentNode.Text & Mid(tNode.Text, Len(ParentNode.Text) + 1) If tNode.Children > 0 Then UpdateSubNode tNode End If Set tNode = tNode.Next Loop Set tNode = Nothing End Sub
Private Sub CreateTreeview() Dim tNode As Node Set tNode = tvwTest.Nodes.Add(, , "A0", "A0") tNode.Expanded = True tvwTest.Nodes.Add "A0", tvwChild, "A0.0", "A0.0" tvwTest.Nodes.Add "A0", tvwChild, "A0.1", "A0.1"
tvwTest.Nodes.Add , , "A2", "A2" End Sub'更新TreeView 参数DeleteMode: 1 删除 , -1 插入 Public Sub UpdateTreeview(opNode As Node, Optional DeleteMode As Integer = 1) Dim tNode As Node Dim tSTR As String, strCount As String Dim i As Long Dim NewNodeText As String '为插入结点用临时变量 If DeleteMode = 1 Then If opNode.Next Is Nothing Then Exit Sub Set tNode = opNode.Next Else Set tNode = opNode End If
Do While Not tNode Is Nothing strCount = "" For i = Len(tNode.Text) To 1 Step -1 tSTR = Mid(tNode.Text, i, 1) If tSTR = "." Then Exit For End If strCount = tSTR & strCount Next If strCount = tNode.Text Then '说明是顶级 If NewNodeText = "" Then NewNodeText = Mid(strCount, 1, 1) & Mid(strCount, 2) End If
tNode.Text = Mid(strCount, 1, 1) & (CLng(Mid(strCount, 2)) - DeleteMode) Else If NewNodeText = "" Then NewNodeText = tNode.Parent.Text & "." & strCount End If
tNode.Text = tNode.Parent.Text & "." & (CLng(strCount) - DeleteMode) End If If tNode.Children > 0 Then UpdateSubNode tNode End If Set tNode = tNode.Next Loop
If DeleteMode = 1 Then tvwTest.Nodes.Remove opNode.Index Else If opNode.Parent Is Nothing Then tvwTest.Nodes.Add , , , NewNodeText tvwTest.Sorted = True Else tvwTest.Nodes.Add opNode.Parent.Key, tvwChild, , NewNodeText opNode.Parent.Sorted = True End If End If
Set tNode = Nothing End SubPrivate Sub UpdateSubNode(ParentNode As Node) Dim tNode As Node Set tNode = ParentNode.Child Do While Not tNode Is Nothing tNode.Text = ParentNode.Text & Mid(tNode.Text, Len(ParentNode.Text) + 1) If tNode.Children > 0 Then UpdateSubNode tNode End If Set tNode = tNode.Next Loop Set tNode = Nothing End Sub'测试 Private Sub InsertNode_Click() UpdateTreeview tvwTest.SelectedItem, -1 End Sub
Public Sub DeleteSubNode(dNode As Node)
Dim tNode As Node
If dNode.Children > 0 Then
Do While Not dNode.Child Is Nothing
TreeView1.Nodes.Remove dNode.Child.Index
Loop
End If
End Sub删除任意
TreeView1.Nodes.Remove tNode.index 'tNode为任意一结点
A0.0
A0.1
A0.2 '如果删这结点,下面的子结点要放在哪儿?放上一个结点下面还是下一个结点下
A0.3.0
A0.3.1
A0.3是这个规则吗?就是删除一个下面有子结点的结点,他的子结点不能被删除掉是吗?
A0.0
A0.1
A0.2 '如果删这结点,下面的子结点要放在哪儿?放上一个结点下面还是下一个结点下
A0.3.0
A0.3.1
A0.3是这个规则吗?就是删除一个下面有子结点的结点,他的子结点不能被删除掉是吗?
A0
A0.0
A0.1
A0.1.0
A0.1.1
A0.1.2
A0.2
A0.2.0
A0.2.1
A0.3
......
要删除A0.1节点后,应显示为:
A0
A0.0
A0.1
A0.1.0
A0.1.1
A0.2
......
Dim tNode As Node
Set tNode = tvwTest.Nodes.Add(, , "A0", "A0")
tNode.Expanded = True
tvwTest.Nodes.Add "A0", tvwChild, "A0.0", "A0.0"
tvwTest.Nodes.Add "A0", tvwChild, "A0.1", "A0.1"
tvwTest.Nodes.Add "A0", tvwChild, "A0.2", "A0.2"
Set tNode = tvwTest.Nodes.Add("A0", tvwChild, "A0.3", "A0.3")
tNode.Expanded = True
tvwTest.Nodes.Add "A0.3", tvwChild, "A0.3.0", "A0.3.0"
tvwTest.Nodes.Add "A0.3", tvwChild, "A0.3.1", "A0.3.1"
tvwTest.Nodes.Add "A0.3", tvwChild, "A0.3.2", "A0.3.2"
tvwTest.Nodes.Add , , "A1", "A1"
tvwTest.Nodes.Add , , "A2", "A2"
End Sub'删除结点:
Public Sub UpdateTreeview(DeleteNode As Node)
Dim tNode As Node
Dim tSTR As String, strCount As String
Dim i As Long
If DeleteNode.Next Is Nothing Then Exit Sub
Set tNode = DeleteNode.Next
Do While Not tNode Is Nothing
strCount = ""
For i = Len(tNode.Text) To 1 Step -1
tSTR = Mid(tNode.Text, i, 1)
If tSTR = "." Then
Exit For
End If
strCount = tSTR & strCount
Next
If strCount = tNode.Text Then '说明是顶级
tNode.Text = Mid(strCount, 1, 1) & (CLng(Mid(strCount, 2)) - 1)
Else
tNode.Text = tNode.Parent.Text & "." & (CLng(strCount) - 1)
End If
If tNode.Children > 0 Then
UpdateSubNode tNode
End If
Set tNode = tNode.Next
Loop
Set tNode = Nothing
tvwTest.Nodes.Remove DeleteNode.Index
End Sub'更新子结点:
Private Sub UpdateSubNode(ParentNode As Node)
Dim tNode As Node
Set tNode = ParentNode.Child
Do While Not tNode Is Nothing
tNode.Text = ParentNode.Text & Mid(tNode.Text, Len(ParentNode.Text) + 1)
If tNode.Children > 0 Then
UpdateSubNode tNode
End If
Set tNode = tNode.Next
Loop
Set tNode = Nothing
End Sub
Dim tNode As Node
Set tNode = tvwTest.Nodes.Add(, , "A0", "A0")
tNode.Expanded = True
tvwTest.Nodes.Add "A0", tvwChild, "A0.0", "A0.0"
tvwTest.Nodes.Add "A0", tvwChild, "A0.1", "A0.1"
tvwTest.Nodes.Add "A0", tvwChild, "A0.2", "A0.2"
Set tNode = tvwTest.Nodes.Add("A0", tvwChild, "A0.3", "A0.3")
tNode.Expanded = True
tvwTest.Nodes.Add "A0.3", tvwChild, "A0.3.0", "A0.3.0"
tvwTest.Nodes.Add "A0.3", tvwChild, "A0.3.1", "A0.3.1"
tvwTest.Nodes.Add "A0.3", tvwChild, "A0.3.2", "A0.3.2"
tvwTest.Nodes.Add , , "A1", "A1"
tvwTest.Nodes.Add , , "A2", "A2"
End Sub'删除结点:
Public Sub UpdateTreeview(DeleteNode As Node)
Dim tNode As Node
Dim tSTR As String, strCount As String
Dim i As Long
If DeleteNode.Next Is Nothing Then Exit Sub
Set tNode = DeleteNode.Next
Do While Not tNode Is Nothing
strCount = ""
For i = Len(tNode.Text) To 1 Step -1
tSTR = Mid(tNode.Text, i, 1)
If tSTR = "." Then
Exit For
End If
strCount = tSTR & strCount
Next
If strCount = tNode.Text Then '说明是顶级
tNode.Text = Mid(strCount, 1, 1) & (CLng(Mid(strCount, 2)) - 1)
Else
tNode.Text = tNode.Parent.Text & "." & (CLng(strCount) - 1)
End If
If tNode.Children > 0 Then
UpdateSubNode tNode
End If
Set tNode = tNode.Next
Loop
Set tNode = Nothing
tvwTest.Nodes.Remove DeleteNode.Index
End Sub'更新子结点:
Private Sub UpdateSubNode(ParentNode As Node)
Dim tNode As Node
Set tNode = ParentNode.Child
Do While Not tNode Is Nothing
tNode.Text = ParentNode.Text & Mid(tNode.Text, Len(ParentNode.Text) + 1)
If tNode.Children > 0 Then
UpdateSubNode tNode
End If
Set tNode = tNode.Next
Loop
Set tNode = Nothing
End Sub
Dim tNode As Node
Set tNode = tvwTest.Nodes.Add(, , "A0", "A0")
tNode.Expanded = True
tvwTest.Nodes.Add "A0", tvwChild, "A0.0", "A0.0"
tvwTest.Nodes.Add "A0", tvwChild, "A0.1", "A0.1"
tvwTest.Nodes.Add "A0", tvwChild, "A0.2", "A0.2"
Set tNode = tvwTest.Nodes.Add("A0", tvwChild, "A0.3", "A0.3")
tNode.Expanded = True
tvwTest.Nodes.Add "A0.3", tvwChild, "A0.3.0", "A0.3.0"
tvwTest.Nodes.Add "A0.3", tvwChild, "A0.3.1", "A0.3.1"
tvwTest.Nodes.Add "A0.3", tvwChild, "A0.3.2", "A0.3.2"
tvwTest.Nodes.Add , , "A1", "A1"
tvwTest.Nodes.Add , , "A2", "A2"
End Sub'更新TreeView 参数DeleteMode: 1 删除 , -1 插入
Public Sub UpdateTreeview(opNode As Node, Optional DeleteMode As Integer = 1)
Dim tNode As Node
Dim tSTR As String, strCount As String
Dim i As Long
Dim NewNodeText As String '为插入结点用临时变量
If DeleteMode = 1 Then
If opNode.Next Is Nothing Then Exit Sub
Set tNode = opNode.Next
Else
Set tNode = opNode
End If
Do While Not tNode Is Nothing
strCount = ""
For i = Len(tNode.Text) To 1 Step -1
tSTR = Mid(tNode.Text, i, 1)
If tSTR = "." Then
Exit For
End If
strCount = tSTR & strCount
Next
If strCount = tNode.Text Then '说明是顶级
If NewNodeText = "" Then
NewNodeText = Mid(strCount, 1, 1) & Mid(strCount, 2)
End If
tNode.Text = Mid(strCount, 1, 1) & (CLng(Mid(strCount, 2)) - DeleteMode)
Else
If NewNodeText = "" Then
NewNodeText = tNode.Parent.Text & "." & strCount
End If
tNode.Text = tNode.Parent.Text & "." & (CLng(strCount) - DeleteMode)
End If
If tNode.Children > 0 Then
UpdateSubNode tNode
End If
Set tNode = tNode.Next
Loop
If DeleteMode = 1 Then
tvwTest.Nodes.Remove opNode.Index
Else
If opNode.Parent Is Nothing Then
tvwTest.Nodes.Add , , , NewNodeText
tvwTest.Sorted = True
Else
tvwTest.Nodes.Add opNode.Parent.Key, tvwChild, , NewNodeText
opNode.Parent.Sorted = True
End If
End If
Set tNode = Nothing
End SubPrivate Sub UpdateSubNode(ParentNode As Node)
Dim tNode As Node
Set tNode = ParentNode.Child
Do While Not tNode Is Nothing
tNode.Text = ParentNode.Text & Mid(tNode.Text, Len(ParentNode.Text) + 1)
If tNode.Children > 0 Then
UpdateSubNode tNode
End If
Set tNode = tNode.Next
Loop
Set tNode = Nothing
End Sub'测试
Private Sub InsertNode_Click()
UpdateTreeview tvwTest.SelectedItem, -1
End Sub