1.TreeView中选择父节点时,其子节点也被选取
2.且选择后还能获取到所有被选取节点信息,如点击按钮
我的选取代码如下,只能实现下一级被选中,请教各位了,谢谢 
Private Sub Form_Load()
    With Me.TreeView1
        .Nodes.Add , , "nodBoot", "Boot"
        .Nodes.Add "nodBoot", tvwChild, "Child1", "Child1"
        .Nodes.Add "nodBoot", tvwChild, "Child2", "Child2"
        .Nodes.Add "Child1", tvwChild, "Child3", "Child3"
        .Nodes.Add "Child1", tvwChild, "Child4", "Child4"
    End With
End SubPrivate Sub TreeView1_NodeCheck(ByVal node As MSComctlLib.node)
  Dim objCurrentNode As node
    If node.Children > 0 Then
      Set objCurrentNode = node.Child
      objCurrentNode.Checked = node.Checked  
      Do While objCurrentNode <> objCurrentNode.LastSibling
        Set objCurrentNode = objCurrentNode.Next
        objCurrentNode.Checked = node.Checked
      Loop 
   End If
End Sub

解决方案 »

  1.   

    Private Sub Form_Load()
        With Me.TreeView1
            .Nodes.Add , , "nodBoot", "Boot"
            .Nodes.Add "nodBoot", tvwChild, "Child1", "Child1"
            .Nodes.Add "nodBoot", tvwChild, "Child2", "Child2"
            .Nodes.Add "Child1", tvwChild, "Child3", "Child3"
            .Nodes.Add "Child1", tvwChild, "Child4", "Child4"
        End With
    End SubSub CheckNodes(tv As TreeView, oNode As Node, Optional fChecked As Boolean = False, Optional lLevel As Long = 0)
        '打上勾
        oNode.Checked = fChecked
           
        '有孩子的先抱孩子
        If Not oNode.Child Is Nothing Then
            CheckNodes tv, oNode.Child, fChecked, lLevel + 1
        End If
        
        '有兄弟的再抱兄弟
        If (Not oNode.Next Is Nothing) And lLevel > 0 Then
            CheckNodes tv, oNode.Next, fChecked, lLevel
        End If
    End SubPrivate Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
        Call CheckNodes(TreeView1, Node, Node.Checked)
    End Sub
      

  2.   

    If (Not oNode.Next Is Nothing) And lLevel > 0 Then
        CheckNodes tv, oNode.Next, fChecked, lLevel
    End If
    这段代码溢出