| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2696 人关注过本帖
标题:请教TreeView遍历选中节点及其子节点
取消只看楼主 加入收藏
hyf8285
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2013-1-21
收藏
得分:0 
算层数简单,是这个路径不好算,你拖动后,路径就变了,包括子节点的路径,因为你还没有加载,所以FullPath得到的是原来的路径,所以我一开始的问题就是问你们如何算出拖动后节点的路径
2022-07-13 19:02
hyf8285
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2013-1-21
收藏
得分:0 
回复 20楼 csyx
哈哈!是的,这个比喻好形象
2022-07-13 19:05
hyf8285
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2013-1-21
收藏
得分:0 
以下是引用csyx在2022-7-13 09:13:34的发言:

如果只是遍历子节点,几行代码就够了
1. 新建一个表单方法: 遍历子节点,代码如下
Lparameters oNode

? oNode.FullPath

Local oo

If oNode.Children > 0
    oo = oNode.Child
    Do while !IsNull(oo)
        This.遍历子节点(oo)
        oo = oo.Next
    EndDo
EndIf


2. 遍历子节点按钮.Click 调用它:
Thisform.遍历子节点(Thisform.treeView1.SelectedItem)

大佬!再请教:用你的递归遍历子节点,现在当我用这个查找子节点时,如果找到结果,则立即退出递归!请问:当满足条件时如何退出递归?谢谢!

Lparameters oNode,tcSelectKey
Local oCurNode,ChildKey,isIndetical
isIdentical = .F.
*ChildKey = oNode.Key
a = Alltrim(oNode.Key)
Messagebox(a+tcSelectKey,0,"")
If a == Alltrim(tcSelectKey)
    isIndetical = .T.
    Messagebox("相同了,找到啦!",0,"")
    Return                            &&这里应该退出了,并返回.T.,但是还是会继续下去,直至最后
Else
    isIndetical = .F.
Endif
If oNode.Children > 0
    oCurNode = oNode.Child
    Do While !Isnull(oCurNode)        
        This.findTreeNode(oCurNode,tcSelectKey)
        oCurNode = oCurNode.Next        
    Enddo
Endif
Return isIndetical

[此贴子已经被作者于2022-7-14 18:42编辑过]

2022-07-14 18:22
hyf8285
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2013-1-21
收藏
得分:0 
回复 23楼 csyx
好像不是立即退出的,还要再递归一次才退出,而且退出后都返回T

[此贴子已经被作者于2022-7-14 20:18编辑过]

2022-07-14 20:07
hyf8285
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2013-1-21
收藏
得分:0 
回复 25楼 csyx
那个是我看的输出结果,我条件是 a = tcSelectKey 现在解决了,我在外面加个变量,初始为.F.,然后找到后变为.T.,这样判断这个为.T.时就退出递归了,但是返回值都是.F.啊?
2022-07-14 20:38
hyf8285
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2013-1-21
收藏
得分:0 
程序代码:
Lparameters oNode,tcSelectKey
Local oCurNode,ChildKey,isIndetical
isIdentical = .F.
*ChildKey = oNode.Key
a = Alltrim(oNode.Key)
Messagebox(a+tcSelectKey,0,"")
If a == Alltrim(tcSelectKey)
    isIndetical = .T.    
    Messagebox("相同了,找到啦!",0,"")
    isCheck = .T.  &&加了这个
    Return isIndetical                        
Endif
If oNode.Children > 0
    oCurNode = oNode.Child
    Do While !Isnull(oCurNode) 
        If isCheck = .t.  &&判断
           Exit 
        Else 
        This.findTreeNode(oCurNode,tcSelectKey)            
        oCurNode = oCurNode.Next
        EndIf         
    Enddo
Endif
Return isIndetical


[此贴子已经被作者于2022-7-14 20:42编辑过]

2022-07-14 20:41
hyf8285
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2013-1-21
收藏
得分:0 
好的,我在研究研究,谢谢你!
2022-07-14 21:06
hyf8285
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2013-1-21
收藏
得分:0 
回复 23楼 csyx
大佬,烦请您再帮我看下昨晚的问题!好像我做的不对!我第一次用递归,不懂原理!要求在文件里,谢谢!
tree问题.rar (22.82 KB)
2022-07-15 15:52
hyf8285
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2013-1-21
收藏
得分:0 
回复 32楼 csyx
早上好!这个参数是从你点击的节点开始搜索,后面的东南大学,是随便指定的一个节点,主要用来测试,后面用在程序里时,东南大学也会指定一个参数
2022-07-16 07:03
hyf8285
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2013-1-21
收藏
得分:0 
是从选中节点开始搜索
2022-07-16 07:04
快速回复:请教TreeView遍历选中节点及其子节点
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014201 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved