以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [求助]展开某一层级的节点 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=169892) |
-- 作者:chnfo -- 发布时间:2021/7/5 20:48:00 -- [求助]展开某一层级的节点 有一个树,节点数上万个。希望只展开到第N(如3)层。如果用遍历,如果节点的level<3,则expand。但效率很低…,差不多4秒。有什么办法快点? |
-- 作者:有点蓝 -- 发布时间:2021/7/5 21:27:00 -- 和level有什么关系? Dim tr As WinForm.TreeView tr = Forms("窗口1").Controls("TreeView1") For Each td As WinForm.TreeNode In tr.Nodes td.Expand For Each td2 As WinForm.TreeNode In td.Nodes td2.Expand Next Next |
-- 作者:chnfo -- 发布时间:2021/7/5 21:38:00 -- 如果指定展开第N层呢?不用level? |
-- 作者:有点蓝 -- 发布时间:2021/7/5 22:18:00 -- 做个递归 Dim tr As WinForm.TreeView tr = Forms("窗口1").Controls("TreeView1") Dim n As Integer = 4 For Each td As WinForm.TreeNode In tr.Nodes td.Expand Functions.Execute("abc",td,n) Next 递归函数abc Dim td As WinForm.TreeNode =args(0) Dim n As Integer = args(1) - 1 If n > 0 Then For Each td2 As WinForm.TreeNode In td.Nodes td2.Expand Functions.Execute("递归",td2,n) Next End If |
-- 作者:客人 -- 发布时间:2021/7/6 9:36:00 -- 感觉效率还是有点低。 目前实测节点数17000个。其中一级节点21个,二级节点305个,三级2930个,四级14197 用递归方法,第一级展开1秒以内(这个很好),第二级展开就要3秒了,第三级展开就要8秒了。如果层级再深或节点数再多,可能就等不起了
|
-- 作者:有点蓝 -- 发布时间:2021/7/6 9:38:00 -- 加上停止绘制:http://www.foxtable.com/webhelp/topics/2439.htm,不行没有其它办法了 |
-- 作者:chnfo -- 发布时间:2021/7/6 9:38:00 -- 递归跟遍历几乎没有什么区别.假定要展开的层级为K For Each nod As WinForm.TreeNode In trv1.AllNodes If nod.Level < k Then nod.Expand End If Next |
-- 作者:有点蓝 -- 发布时间:2021/7/6 9:40:00 -- 如果目录树层级有4级,要递归4级,当然没有区别。如果目录树层级有10级,要递归4级,和遍历所有节点的区别就大了,而且是很大 |
-- 作者:chnfo -- 发布时间:2021/7/6 10:04:00 -- 如果是那样的话,可能就用其它的方法了 dim lst as new list(of WinForm.TreeNode) \'\'因为就算树节点有10万行,遍历的速度也很快
For Each nd As WinForm.TreeNode In trv1.AllNodes If nd.Level < k Then lst.add(nd) End If Next For Each nd As WinForm.TreeNode In lst nd.Expand Next |