以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]树节点的复选问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=71694)

--  作者:chnfo
--  发布时间:2015/7/16 12:02:00
--  [求助]树节点的复选问题
现在的方法可以做下级节点与上级节点复选状态一致,但如何做到只要任何一个下级节点没勾选,它的所有直系上级节点不勾选,当父节点的所有下级节点勾选后,它自动勾选?
--  作者:大红袍
--  发布时间:2015/7/16 12:03:00
--  

 目录树全选代码

 


Dim nd,nd1 As  WinForm.TreeNode
nd = e.node
If nd.Nodes.Count > 0
    For Each nd1 In nd.AllNodes
        nd1.Checked = nd.Checked
    Next
End If
If e.node.Checked = False
    Do While  nd.parentnode IsNot Nothing
        nd = nd.parentnode
        If nd.Nodes.Count > 0
            For i As Integer = 0 To nd.Nodes.Count -1
                If nd.Nodes(i).Checked = True
                    Exit Do
                End If
                If i = nd.Nodes.Count -1
                    nd.Checked = False
                End If
            Next
        End If
    Loop
Else
    Do While  nd.parentnode IsNot Nothing
        nd = nd.parentnode
        nd.Checked = True
    Loop
End If


--  作者:chnfo
--  发布时间:2015/7/16 12:45:00
--  
用了一个自认为简单的逻辑来实现它了,感谢袍兄
\'----这是选择了父节点,则所有子节点选中
For Each nd As WinForm.TreeNode In e.Node.AllNodes
    nd.Checked  = e.Node.Checked
Next
‘----当子节点的选择状态发生变化时,父节点的变化情况’
For Each nd As WinForm.TreeNode In e.Sender.AllNodes  ‘遍历所有节点’
     if nd.nodes.count > 0 then 
    For Each cnd As WinForm.TreeNode In nd.AllNodes
        If cnd.Nodes.Count = 0 Then   ‘这是用来判断末级节点的选中状态,非末级节点不用理会’
            If cnd.Checked = False Then  ‘如果末级节点有任何一个未选中,则该节点不被选中’
                nd.Checked = False
                Exit For
            Else
                nd.Checked = True  ‘如果末级节点选中,则再找下一个末级节点的选择状态’
            End If
        End If
    Next
end if 
Next


[此贴子已经被作者于2015/7/16 12:48:05编辑过]