在设置一个VirtualStringTree节点的索引?

我试图改变一个节点的索引,因为有在任何时候都必须在我的树的底部有些特定的节点。 我试图改变Node.Index,但这并没有改变任何东西。 所以我的问题是:我如何改变PVirtualNode的指数?

谢谢! - 杰夫

--------------解决方案-------------

既然你仍在使用树型控件作为容器,由加速器提供了理想的解决方案不是提供给您。

一个比较明显的解决办法,因为你的树视图中没有层次结构(即它是一个列表)是使用的Sort方法,用自己的比较功能( OnCompareNodes )。

另言自明的策略是添加您在底部希望最后的节点。 如果以后需要添加其他节点,然后将它们与特殊的最后一个节点,上述InsertNode 。 正如你所描述的那样这个简单的方法可能足够了这个问题。

你canot改变一个节点的索引。 通常,当使用VirtualStringTree你在你自己的数据结构,从树中单独握住你的数据和事件访问数据。 您也可以直接在节点(使用记录)存储数据,但我更喜欢另一种方法,因为它保持了逻辑树视图。

例如,您可以将数据存储在一个列表,并在访问此列表GetText处理器(可以使用Node.Index )。 然后,如果要重新排序的项目,只需重新排列你的清单,一切将自动发生(可能需要调用Invalidate上树)。

伪代码:

初始化:

Tree.RootNodeCount := MyList.Count;

GetText事件:

NodeText := MyList [Node.Index];

重新排序:

Reorder (MyList);
Tree.Invalidate;

要更改节点 A的索引,找到了你想要的索引节点B A有,然后调用Tree.MoveTo(A, B, amInsertBefore, False) ; B,一切之后,它会向下移动一个使余地 ,他们的Index字段将被重新计算。 这个工程即使还没有在树中存在(如只调用后MakeNewNode )。

如果您使用Index来在列表或数组相应的数据值的每个节点关联,那么你会发现本作重新排序显示的值基本无效。

TVirtualNode是一个双向链表,它不是一个基于索引的结构:你通过删除和添加它,你想让它更改节点的索引。

考虑DeleteNodeAddChild

分类:德尔福 时间:2015-03-15 人气:3
本文关键词: 德尔福,virtualtreeview
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.702 (s). 10 q(s)