TREEVIEW-CHECKBOX父节点随子节点的变化而变化
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函数,因为灰色的勾表示里面只有一部分子节点被选中打勾,而这个灰色是如何做的呢?
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函数,因为灰色的勾表示里面只有一部分子节点被选中打勾,而这个灰色是如何做的呢?
...全文
相关推荐
Javascript 实现TreeView CheckBox全选效果
Javascript 实现TreeView CheckBox 选中父节点时所有子节点全选,取消时全部取消
带CheckBox的TreeView控件
带CheckBox的TreeView,可以在点击CheckBox或者TreeViewItem的时候改变勾选状态。
用js脚本控制asp.net下treeview的NodeCheck的实现代码
根据TreeView2.js修改后的TreeView父节点与子节点的CheckBox联动.
WPF带CheckBox的TreeView开发[项目代码]
本文介绍了在WPF中开发带CheckBox的TreeView的方法,重点解决了checked属性如何关联数据的问题。作者通过绑定数据源的方式实现了动态改变checked状态,并在此基础上增加了级选模式,即选中一个节点时自动选中其全部子节点和父节点。文章详细展示了实现代码,包括在checkbox上增加click事件以及在model中设置子项和父项选中状态的方法。作者还提供了参考链接和源代码,方便读者进一步学习和实践。
纯JQuery实现三态选择TreeView示例
纯JQuery实现三态选择TreeView示例


控件
