TreeView有checkbox 当父节点选择框选中 子节点将全部选中 代码怎么写的?

来源:互联网 发布:部落冲突5本升级数据 编辑:程序博客网 时间:2024/04/30 11:20

Option Explicit

Private Sub Form_Load()
    With TreeView1
        .Nodes.Add , , "Parent1", "Test1"
        .Nodes.Add "Parent1", tvwChild, "Child1", "Test_CH1"
        .Nodes.Add "Parent1", tvwChild, "Child2", "Test_CH2"
        .Nodes.Add "Parent1", tvwChild, "Child3", "Test_CH3"
        .Nodes.Add "Child3", tvwChild, "Child_33", "Test_CH3_CH3"
        .Nodes.Add "Parent1", tvwChild, "Child4", "Test_CH4"
        .Nodes.Add "Parent1", tvwChild, "Parent2", "Test2"
        .Nodes.Add "Parent2", tvwChild, "Child11", "Test_CH1"
        .Nodes.Add "Parent2", tvwChild, "Child22", "Test_CH2"
        .Nodes.Add "Parent2", tvwChild, "Child33", "Test_CH3"
        .Nodes.Add "Parent2", tvwChild, "Child44", "Test_CH4"
        .Checkboxes = True
        .LineStyle = tvwTreeLines
    End With
    NodeAllExpanded TreeView1
End Sub


Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
    Call AllChildSynchro(Node)
    Call AllMaterSynchro(Node)
End Sub


'// -选中下级-
Private Sub AllChildSynchro(ByVal NodeChoose As Object)
    On Error Resume Next
    Dim lNextLoop As Long
    Dim ObjChildren As Object
    If CBool(NodeChoose.Children > 0) Then
        Set ObjChildren = NodeChoose.Child
        For lNextLoop = 1 To NodeChoose.Children
            ObjChildren.Checked = NodeChoose.Checked
            If ObjChildren.Children > 0 Then Call AllChildSynchro(ObjChildren)
            Set ObjChildren = ObjChildren.Next
        Next lNextLoop
    End If
End Sub

'// -取消上级-
Private Sub AllMaterSynchro(ByVal NodeChoose As Object)
    On Error Resume Next
    If Not NodeChoose.Checked Then If TypeName(NodeChoose.Parent) = "INode" Then NodeChoose.Parent.Checked = False
    If Not NodeChoose.Checked Then If TypeName(NodeChoose.Parent) = "INode" Then Call AllMaterSynchro(NodeChoose.Parent)
End Sub

'// -节点张开-
Private Sub NodeAllExpanded(ByVal ObjTvw As Object)
    On Error Resume Next
    Dim ObjChild As Object
    For Each ObjChild In ObjTvw.Nodes
        ObjChild.Expanded = IIf(ObjChild.Key = ObjChild.Root.Key, False, True)
        ObjChild.Root.Expanded = IIf(ObjChild.Key = ObjTvw.Nodes(ObjTvw.Nodes.Count).Key, True, False)
    Next ObjChild
End Sub 

原创粉丝点击