标题:请教TreeView遍历选中节点及其子节点
只看楼主
hyf8285
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2013-1-21
得分:0 
回复 10楼 csyx
好的,谢谢!我学习下!
2022-07-13 17:49
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
还有些需要写代码限制的拖放操作,例如:父节点拖放到自己的子节点上
2022-07-13 18:00
hyf8285
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2013-1-21
得分:0 
回复 12楼 csyx
是的,正在学习!那这样我原来程序里的大部分代码都要修改了,你是用递归来加载数据的吧?那我原来表里的nLayer字段(层级)还需要了吗?
2022-07-13 18:22
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
如果 nLayer 没有其他用途是可以不要,cfullpath 好像也用不到
改成递归加载方式,是为了保障先加载父节点,再由父节点去加载自己的子节点,避免出现父节点还没加载就先加载子节点的情况
2022-07-13 18:44
hyf8285
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2013-1-21
得分:0 
回复 14楼 csyx
nLayer字段就是为了动态加载数据而设的,按照“父对象+nLayer”升序排列,一层一层的加载,也是为了避免父对象还未加载而出现错误,所以,我本来的想法是,拖动节点后,先算出新节点的层数,然后加载,这样也不会错。问题就是不会算拖动后节点的层数,现在按照你的方法,nLayer可以不要了,cFullPath是在我的程序里用到的。
非常感谢您的帮助!我还在学习领悟你的方法!

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

2022-07-13 18:55
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
先说要做的限制也很容易判断, OLEDragDrop 开始部分改一下
c0 = This.Nodes(srcKey)
c1 = This.Nodes(tagKey)
if c0 $ c1 then 不允许 else 允许

如同儿子可以过继给大伯叔叔做儿子,但绝对不允许老爸变成儿子的儿子
2022-07-13 18:55
hyf8285
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2013-1-21
得分:0 
限制条件我会写的,包括不能移到子节点的子节点...
2022-07-13 18:59
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
算层数应该简单吧,Occurs('\', oNode.FullPath) 就是这个节点的层数(如果节点文本中不会出现 \ 符号的话)
2022-07-13 19:00
hyf8285
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2013-1-21
得分:0 
算层数简单,是这个路径不好算,你拖动后,路径就变了,包括子节点的路径,因为你还没有加载,所以FullPath得到的是原来的路径,所以我一开始的问题就是问你们如何算出拖动后节点的路径
2022-07-13 19:02
csyx
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:29
帖 子:484
专家分:1827
注 册:2018-3-13
得分:0 
也是,一个节点好算,关键是可能拖一大串葡萄过来
2022-07-13 19:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509547-1-1.html




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

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