TREEVIEW-CHECKBOX父节点随子节点的变化而变化
vbyes 2008-11-08 04:37:45 TREEVIEW-CHECKBOX父节点随子节点的变化而变化
1
Private Sub CheckChild(ByVal Node As MSComctlLib.Node, ByVal bCheck As Boolean, Optional ByVal bNext As Boolean = True, Optional ByVal bChild As Boolean = True)
If Not Node Is Nothing Then
Node.Checked = bCheck
If Node.Children And bChild Then
Call CheckChild(Node.Child, bCheck, True, True) '对子节点
End If
If bNext Then
Call CheckChild(Node.Next, bCheck, True, bChild) '对同一层节点
End If
End If
End Sub
Private Sub TreeView11_NodeCheck(ByVal Node As MSComctlLib.Node)
Call CheckChild(Node, Node.Checked, False, True) '处理子节点
End Sub
2
Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
Dim i As Long
Dim NodX As Node
Set NodX = Node
'这里是处理如果该节点的子节点被选掉,则该父节点以至于上溯到根节点都被选掉
Do While NodX.Root <> NodX
If NodX.Checked = False And NodX.Root <> NodX Then NodX.Parent.Checked = False
Set NodX = NodX.Parent
Loop
'使用递归,把该节点的字节点都选中
If Node.Children > 0 Then
For i = Node.Child.FirstSibling.Index To Node.Child.LastSibling.Index
TreeView1.Nodes.Item(i).Checked = Node.Checked
Call TreeView1_NodeCheck(TreeView1.Nodes.Item(i))
Next i
End If
Set NodX = Nothing
End Sub
1和2 的两种方法 只是 在选择父节点时,子节点作相应变化, 我现在想问的是 如果 所有节点前的 CHECKBOX 都为空(勾都取消) ,现在 我在 某个节点打上勾,那么它的所有父节点也应该有变化 :
具体变化是这样: 假设所有节点的 CHECKBOX 都为空 ,某个节点的子节点共有3个,当在其中一个子节点上打上勾,那么其子节点的所有父节点(父父节点)都打上 灰色的 勾, 如果3个子节点都打勾,那么这3个子节点的所有父节点(父父节点)都打上 黑 色的 勾 . 如果能把瑞星软件 打开看看和操作一下 其树目录 就能明白我的意思了,请高手帮忙,是否需要用到API函数,因为灰色的勾表示里面只有一部分子节点被选中打勾,而这个灰色是如何做的呢?