treeview中节点显示为A0
  A0.0
  A0.1
  A0.2
    A0.3.0
    A0.3.1
  A0.3
  ......我要删除任一节点,以上规则不变?
我要删除某一节点下的所有子孙节点,但不删除这个节点,怎么办?

解决方案 »

  1.   

    '删除子药结点
    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为任意一结点
      

  2.   

    我要删除任一节点,以上规则不变?这句我不是很清楚,删除任一节点很容易,一个语句,但以上规则不变是啥意思?如果你要删除 AO.2下的全部子节点而不删除AO.2 ,把AO.2选中再调用DeleteSubNode AO.2
      

  3.   

    A0
      A0.0
      A0.1
      A0.2   '如果删这结点,下面的子结点要放在哪儿?放上一个结点下面还是下一个结点下
        A0.3.0
        A0.3.1
      A0.3是这个规则吗?就是删除一个下面有子结点的结点,他的子结点不能被删除掉是吗?
      

  4.   

    A0
      A0.0
      A0.1
      A0.2   '如果删这结点,下面的子结点要放在哪儿?放上一个结点下面还是下一个结点下
        A0.3.0
        A0.3.1
      A0.3是这个规则吗?就是删除一个下面有子结点的结点,他的子结点不能被删除掉是吗?
      

  5.   

    还是删除了AO.2就把AO.2的子结点向上一级?
      

  6.   

    都不是,删除一个有子节点的节点时,其子节点也全删除,如
    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
      ......
      

  7.   

    插入一个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 "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
      

  8.   

    插入一个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 "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
      

  9.   

    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 "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