以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]多选目录树复选框勾选代码问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=136148)

--  作者:hanzhang98
--  发布时间:2019/6/8 16:01:00
--  [求助]多选目录树复选框勾选代码问题
老师好。想实现:勾选子节点时自动勾选其上级节点(具有子权限必定拥有父权限);取消父节点勾选则全部取消子节点勾选(没有父权限也就没有子权限)。请老师帮助修正代码。谢谢。

[此贴子已经被作者于2019/6/9 21:48:31编辑过]

--  作者:有点蓝
--  发布时间:2019/6/8 17:11:00
--  
If e.Node.ParentNode IsNot Nothing AndAlso e.Node.Checked  Then   \'勾选子节点时
    e.Node.ParentNode.Checked = True \'勾选父节点(因为具有子权限就必定具有父权限)
End If
If e.Node.Checked = False   \'如果取消勾选父节点
    For Each cnd As WinForm.TreeNode In e.Node.Nodes    \'遍历节点集合
        Functions.Execute("setChildren",cnd )
    Next
End If


添加一个内部函数setChildren

Dim nd As WinForm.TreeNode = args(0)
For Each cnd As WinForm.TreeNode In nd.Nodes    \'遍历节点集合
    cnd.Checked = False    \'取消勾选子节点,因为取消父权限就必定没有子权限
    Functions.Execute("setChildren",cnd )
Next


--  作者:hanzhang98
--  发布时间:2019/6/8 18:14:00
--  
老师好。谢谢老师帮助。但还几有个问题,
    1、勾选子节点时能自动勾选其父节点,但取消父节点的勾选时,其下级子节点不能取消,但能取消最末级子节点的勾选。如果手动全部取消子节点的勾选时,到最后一个(即全部取消完)时,报错“未将对象引用设置到对象的实例。”;

    2、目录树共有4层,如何修改代码来实现:
        勾选时: 若 “勾选第4层子节点时,能自动勾选第3、2、1层父节点; 勾选第3层子节点时,能自动勾选第2、1层父节点;勾选第2层子节点时,能自动勾选第1层父节点;” 。
        取消勾选时:若取消第3层节点勾选,则自动取消第4层子节点勾选; 若取消第2层节点勾选,则自动取消第3、4层子节点勾选;若取消第1层节点勾选,则自动取消第2、3、4层子节点勾选;

     请老师费心帮助指导。谢谢。
[此贴子已经被作者于2019/6/8 18:23:22编辑过]

--  作者:有点甜
--  发布时间:2019/6/9 11:13:00
--  

1、贴出你所写代码;

 

2、判断层级,如 e.node.level 的值,如果是3(第四层),那就用 e.node.parentnode,e.node.parentnode.parentnode 。。。 分别控制。其它同理。


--  作者:hanzhang98
--  发布时间:2019/6/9 11:24:00
--  
请老师帮助.谢谢.
[此贴子已经被作者于2019/6/9 21:49:33编辑过]

--  作者:有点甜
--  发布时间:2019/6/9 11:38:00
--  

取消父节点,子节点全部取消?参考

 

If e.Node.Checked = False   \'如果取消勾选父节点
    For Each cnd As WinForm.TreeNode In e.Node.AllNodes    \'遍历节点集合
        cnd.Checked = false
    Next
End If

--  作者:hanzhang98
--  发布时间:2019/6/9 12:06:00
--  
甜老师好.     这个问题如何办:  如果取消所有节点的勾选时,报错“未将对象引用设置到对象的实例。”;请老师指导.谢谢.
[此贴子已经被作者于2019/6/9 12:06:21编辑过]

--  作者:有点甜
--  发布时间:2019/6/9 17:28:00
--  

删除你原来的代码,6楼代码不会报错。

 

请学会调试定位出错位置。 http://www.foxtable.com/webhelp/scr/1485.htm