hur.cn - 华软网

 热门搜索

是否是PB的treeview控件Bug?欢迎讨论!

  作者:未知    来源:网络    更新时间:2018/5/16
不知大家注意到没有,PB的treeview控件,在一开始给它InsertItem时,它每个节点的Handle都是顺序递增的,比如你在窗口打开时,给TreeView增加了50个节点,那么这批节点的Handle就是从1到50。但是!倘若你想刷新当前的TreeView,也就是先删除掉现有节点(for until ... DeleteItem(0) loop )后再给它新增加30个节点,嘿嘿,问题来了:这30个节点的Handle并不是从1~30,而是从50~20!无论是否是增加根节点还是增加子节点,都有类似现象。

哈哈,想起什么了没? 对!就是一维不定界数组!这种分了多少就有多少却又不能减少的特性只有一维不定界数组才有,也就是说,PB开发者图省事,在保存TreeView的节点数据时并没有真正用树形数据结构来存储,而是直接开了个一维不定界字符串数组来保存各节点的Label, 各个节点的Handle就是这个数组各个元素的下标。这样做了对他们来说当然简单方便,可就苦了我们了。难怪PB的TreeView用起来这么费劲,该有的基本方法如reset()、Filter()、AddRootNode()等等都没有,还得我们自己动手解决。唉~~ 

本来偶今天做了一个datawindowchild到TreeView的映射UO,一开始总以为每次刷新之后肯定都是从1开始,以为这样一映射了TreeView的Handle就对应了DDDW的行号,接着取DDDW的相应数据多方便啊。。。可惜折腾了一下午才搞明白不能这么做,还是得老老实实的把LABEL取出来,再到DDDW中去FIND一把。。。

以上是偶一点不成熟的看法,各位同仁有什么高见,都拿出来讨论讨论吧。偶现在用的是PB7,补丁打了一堆,倘不知PB8、9、10有没此类问题呢?


------华软网友回答------
本来偶今天做了一个datawindowchild到TreeView的映射UO

如果要映射的话,最好和TreeViewItem的data属性关联,pb中treeview节点的Handle并不是节点的真正句柄,这个你用api取得节点的Handle就会发现,我也觉得奇怪,为什么不直接用这个句柄而用1.....n这个顺序数呢?看起来简单,其实一点用也没有.
------华软网友回复------
楼上的厉害啊,看到了事物的本质。请问大侠是用的是哪一个API函数取到的Handle呢? 能否简单指点说明一下~~
------华软网友回复------
我觉得treeviewitem的handle是不是顺序数或者是不是ulong类型的数都无所谓。对于win api来说handle就仅仅是个入口而已,使用handle的人根本不需要知道handle具体的值是什么,他只要知道用这个handle可以得到他希望的对象就够了。同样道理,在treeview中handle的目的也仅仅是唯一地标识每一个item,然后用户可以在不必知道handle值的情况下,得到handle指定得item。最后,我认为楼主不应该要求pb得设计者一定要把handle做成自然数序列,因为treeview得各个item完全可能被用户改变,删除,又或插入新的项目,就算一开始是有序的,经过多次改变之后,也就乱了。还有,就算是不变的树,生成的时候用的算法不一样,其序列也是不一样的。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。