以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]多选目录树首节点如何发挥作用位置插入节点  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=126215)

--  作者:无限5180
--  发布时间:2018/10/16 17:16:00
--  [求助]多选目录树首节点如何发挥作用位置插入节点
多选目录树首节点如何发挥作用位置插入节点

图片点击可在新窗口打开查看此主题相关图片如下:多选目录树第一节点不参与选择.jpg
图片点击可在新窗口打开查看
如图中我在首节点位置插入了“所有记录”,让这个节点发挥作用,请帮忙看看,谢谢!!!


--  作者:有点甜
--  发布时间:2018/10/16 17:21:00
--  

在你的事件那里判断节点名称,如

 

If e.node.text = "所有节点" OrElse e.sender.Nodes("所有节点").checked Then

    msgbox(123)

Else

    \'本来代码

End If


--  作者:无限5180
--  发布时间:2018/10/16 18:11:00
--  
现在又出现了一个问题,先勾选了名为“所有记录的”的节点后再勾选其他节点时,发现都是勾选状态,无法进行多选,如何在勾选了其他节点后,自动取消名为“所有记录的”的节点勾选,谢谢
--  作者:有点甜
--  发布时间:2018/10/16 18:14:00
--  

改成

 

If e.node.text = "所有节点" Then

    msgbox(123)

Else

    e.sender.Nodes("所有节点").checked = false

    \'本来代码

End If


--  作者:无限5180
--  发布时间:2018/10/16 18:52:00
--  
没有效果

图片点击可在新窗口打开查看此主题相关图片如下:不行.jpg
图片点击可在新窗口打开查看
勾选其他节点后,名为“所有记录”的节点仍是勾选状态。并且无法多选
[此贴子已经被作者于2018/10/16 18:53:32编辑过]

--  作者:有点蓝
--  发布时间:2018/10/16 20:10:00
--  
代码放到AfterCheckNode事件

贴出你的代码看看

--  作者:无限5180
--  发布时间:2018/10/16 21:22:00
--  
还是不行的

图片点击可在新窗口打开查看此主题相关图片如下:不行2.jpg
图片点击可在新窗口打开查看
这是放在AfterCheckNode事件的代码
Dim Lbs As String() ={"年份","月份","字母","Name","编号"}   \'通用多选目录树加载代码.套用时只需修改本行.
Dim trv As WinForm.TreeView = e.form.Controls("TreeView1")
Dim nd As WinForm.TreeNode = trv.SelectedNode

\'If e.sender.Nodes("所有记录").checked Then
     \'e.sender.Nodes("所有记录").checked = False
\'End If
If e.node.text = "所有节点" Then
    msgbox(123)
Else
    e.sender.Nodes("所有节点").checked = False
    \'本来代码
    Dim flt,s1 As String
    Dim n1 As Integer
    For Each ndx As WinForm.TreeNode In nd.allNodes \'同步子节点选中状态
        ndx.Checked = nd.Checked
    Next
    
    If nd.ParentNode IsNot Nothing Then     \'确定父节点选中状态:
        For i As Integer = nd.ParentNode.level To 0 Step -1   \'
            Dim Inum As Integer = nd.ParentNode.Nodes.Count
            For Each ndc As WinForm.TreeNode In nd.ParentNode.Nodes
                If ndc.Checked Then
                    Inum = Inum -1
                End If
            Next
            If Inum = 0 Then
                nd.ParentNode.Checked = True
                nd = nd.ParentNode
            Else
                nd.ParentNode.Checked = False
                nd = nd.ParentNode
            End If
        Next
    End If
    
    For Each nd In trv.AllNodes
        If nd.Level > 0 AndAlso nd.ParentNode.Checked Then \'如果父节点选中
            Continue For \'跳过此节点,处理下一结点
        End If
        If nd.name = "所有记录" AndAlso nd.Checked Then \'如果父节点选中
            \'nd.Checked = False
            Continue For \'跳过此节点,处理下一结点
        End If
        If nd.Checked AndAlso nd.FullName IsNot Nothing Then
            n1=0
            For Each s1 In nd.FullName.split("\\")
                flt+ =iif(n1 =0,") Or (" ," And ") & Lbs(n1) & " = \'" & s1 & "\'"
                n1+=1
            Next
        End If
    Next
    Application.DoEvents  \'先勾选目录树,再加载数据.
    
    If  flt  IsNot Nothing  Then
        Tables("全表").DataTable.LoadFilter = "(" & flt.Substring(4) & ")) and 代码 = \'YGKQ\'"
        Tables("全表").DataTable.Load()
        \'Tables("全表").Sort = "一级导航排序"
    Else
        Tables("全表").DataTable.LoadFilter ="[_Identify] Is Null"
        Tables("全表").DataTable.Load()
    End If
End If

--  作者:有点蓝
--  发布时间:2018/10/16 21:42:00
--  
汗,别人是举个例子,你就不会改为自己节点的名称么!

If e.node.text = "所有记录" Then
    msgbox(123)
Else
    e.sender.Nodes("所有记录").checked = False
    \'本来代码
    Dim flt,s1 As String

--  作者:无限5180
--  发布时间:2018/10/17 10:07:00
--  
好的
[此贴子已经被作者于2018/10/17 10:12:56编辑过]