form1 treeview1  comand1 
原码如下:
定义结构
Type AA
dept As String  '树的节点文本
loc_id As Integer  '部门唯一索引
prev_id As Integer  '部门的父结点
End Type窗体1
Dim MYaa() As AAPrivate Sub Form_Load()
    '初始化数组
    ReDim MYaa(6)
    MYaa(1).dept = "总部"
    MYaa(1).loc_id = 1
    MYaa(1).prev_id = 0
    MYaa(2).dept = "财务部"
    MYaa(2).loc_id = 2
    MYaa(2).prev_id = 1
    MYaa(3).dept = "生产部"
    MYaa(3).loc_id = 3
    MYaa(3).prev_id = 1
    MYaa(4).dept = "一车间"
    MYaa(4).loc_id = 4
    MYaa(4).prev_id = 3
    MYaa(5).dept = "一小组"
    MYaa(5).loc_id = 7
    MYaa(5).prev_id = 4
    MYaa(6).dept = "销售部"
    MYaa(6).loc_id = 6
    MYaa(6).prev_id = 1
End SubPrivate Sub Command1_Click()
AddTree
MsgBox TreeView1.Nodes.Count
End SubPrivate Sub AddTree(Optional KeyX)
'On Error Resume Next
Dim NodeX As Node
If IsMissing(KeyX) Then
    For i = 1 To 6
        If MYaa(i).prev_id = 0 Then
            Set NodeX = TreeView1.Nodes.Add(, , "r" & MYaa(i).loc_id, MYaa(i).dept)
                NodeX.Tag = MYaa(i).prev_id
                KeyX = MYaa(i).loc_id
                TreeView1.Nodes(1).Expanded = True
        End If
    Next i
    AddTree (KeyX)
Else
   
        For i = 1 To 6
            If MYaa(i).prev_id = KeyX Then
                    Set NodeX = TreeView1.Nodes.Add("r" & KeyX, tvwChild, "r" & MYaa(i).loc_id, MYaa(i).dept)
                    NodeX.Tag = MYaa(i).prev_id
                    KeyX = MYaa(i).loc_id
                    '就是这附近出问题,怎么加到财务部就不加了???如果找不  到父结点是2的就应该回推,怎么不推呢???
                    AddTree (KeyX)
           
                
            End If
        Next i
        
        
End If
End Sub

解决方案 »

  1.   

    玩玩这样的Option ExplicitPrivate Type AA
    dept As String  '树的节点文本
    loc_id As Integer  '部门唯一索引
    prev_id As Integer  '部门的父结点
    End TypeDim MYaa() As AAPrivate Sub Form_Load()
        '初始化数组
        ReDim MYaa(1 To 8)
        MYaa(1).dept = "总部"
        MYaa(1).loc_id = 1
        MYaa(1).prev_id = 0
        MYaa(7).dept = "财务部"
        MYaa(7).loc_id = 2
        MYaa(7).prev_id = 1
        MYaa(3).dept = "生产部"
        MYaa(3).loc_id = 3
        MYaa(3).prev_id = 1
        MYaa(4).dept = "一小组"
        MYaa(4).loc_id = 7
        MYaa(4).prev_id = 4
        MYaa(5).dept = "一车间"
        MYaa(5).loc_id = 4
        MYaa(5).prev_id = 3
        MYaa(6).dept = "销售部"
        MYaa(6).loc_id = 6
        MYaa(6).prev_id = 1
        MYaa(8).dept = "总部1"
        MYaa(8).loc_id = 11
        MYaa(8).prev_id = 0
        MYaa(2).dept = "又一个车间"
        MYaa(2).loc_id = 12
        MYaa(2).prev_id = 11
    End SubPrivate Sub Command1_Click()
    TreeView1.Nodes.Clear
    AddNode'MsgBox TreeView1.Nodes.Count
    End Sub
    Private Sub AddNode(Optional ByVal sKeyIn As String)
        Dim i As Long
        Dim sKey As String
        Dim sParentKey As String
        Dim oNodes As Nodes
        Dim oNode As Node
        Set oNodes = TreeView1.Nodes
        
            For i = LBound(MYaa) To UBound(MYaa)
                With MYaa(i)
                    sParentKey = "r" & CStr(.prev_id)
                    sKey = "r" & CStr(.loc_id)
                    If sKeyIn = "" Then
                        If .prev_id <> 0 Then
                            On Error Resume Next
                            Set oNode = oNodes(sParentKey)
                            If Err.Number = 35601 Then '无此父节点,添加之
                                AddNode sParentKey
                            End If
                            Set oNode = oNodes(sKey)
                            If Err.Number = 35601 Then '无此节点,添加之
                                Set oNode = oNodes.Add(sParentKey, tvwChild, sKey, .dept)
                            End If
                            On Error GoTo 0
                        Else
                            On Error Resume Next
                            Set oNode = oNodes(sKey)
                            If Err.Number = 35601 Then '无此节点,添加之
                                Set oNode = oNodes.Add(, , sKey, .dept)
                            End If
                            On Error GoTo 0
                        End If
                        oNode.Expanded = True
                    Else
                        If sKey = sKeyIn Then
                            If .prev_id <> 0 Then
                                On Error Resume Next
                                Set oNode = oNodes(sParentKey)
                                If Err.Number = 35601 Then '无此父节点,添加之
                                    AddNode sParentKey
                                End If
                                Set oNode = oNodes(sKey)
                                If Err.Number = 35601 Then '无此节点,添加之
                                    Set oNode = oNodes.Add(sParentKey, tvwChild, sKey, .dept)
                                End If
                                On Error GoTo 0
                            Else
                                On Error Resume Next
                                Set oNode = oNodes(sKey)
                                If Err.Number = 35601 Then '无此节点,添加之
                                    Set oNode = oNodes.Add(, , sKey, .dept)
                                End If
                                On Error GoTo 0
                            End If
                            oNode.Expanded = True
                            Exit For
                        End If
                    End If
                End With
            Next
    End Sub