我正在寻找一个非可视持久树(TStringTree)实现.如果有人知道任何好的实施,请告诉我.
谢谢.
正如Rob Kennedy先生所建议的那样,我已经到了需要停止将数据存储在VCL组件中并具有"基础数据结构"的地步.
首先,这个问题是关于"我如何建立基础数据结构".:)
我的层次结构由2级节点组成.
现在,我通过循环根节点来完成我的东西,其中我循环通过rootnode的子节点,以获得我需要的东西(数据).我希望能够将所有数据存储在所谓的底层数据结构中,以便我可以使用线程轻松修改条目(我想我能够做到这一点?)
但是,当循环遍历我的条目(现在)时,结果取决于节点的Checkstate - 如果我使用的是底层数据结构,我怎么知道我的节点是否被检查,当我的数据结构循环通过时,而不是我的节点?
假设我想使用2个级别.
这将是父母:
TRoot = Record
RootName : String;
RootId : Integer;
Kids : TList; //(of TKid)
End;
Run Code Online (Sandbox Code Playgroud)
那孩子:
TKid = Record
KidName : String;
KidId : Integer;
End;
Run Code Online (Sandbox Code Playgroud)
这基本上就是我现在所做的.评论说这不是最好的解决方案,所以我愿意接受建议.:)
我希望你理解我的问题.:)
谢谢!
我的树有两级节点 - 它是一个联系人列表样式树.
我的问题是,我希望在所有"联系人类别"中检查所有联系人.这是我现在看的联系人列表的截图(是的,我有权发布)

如您所见,Todd Hirsch在类别测试类别中进行了检查,但未在所有联系人中进行检查.我想要实现的目标是让联系人在每个类别中都具有相同的检查状态.
示例:我在测试类别中检查Todd Hirsch - Todd Hirsch会自动检入所有联系人(以及其他所有类别).如果我在所有联系人中查看Todd Hirsch,他也将在测试类别中进行检查.如果我在所有联系人中取消选中Todd Hirsch,他也将在测试类别中取消选中.
我尝试通过VirtualStringtree的OnChecking事件,通过循环遍历树中每个节点的整个树,但是当联系人列表很大(2000 +)时,它非常慢,当它有5000+时,它甚至可能崩溃我的程序(应用程序已停止工作)
你有什么建议?
这是我用来确保只检查一次联系人的代码.(这不是我现在想要的,但这就是我现在正在使用的.)
////////////////////////////////////////////////////////////////////////////////
/// HasDuplicateChecked
////////////////////////////////////////////////////////////////////////////////
Function HasDuplicateChecked(Node: PVirtualNode): PVirtualNode;
Var
ParentNode, ChildNode: PVirtualNode;
I, J: Integer;
Begin
// IHCW
Result := Nil;
// Get the first node of the tree..
ParentNode := VT.GetFirst;
// Loop thru the parent nodes.
for I := 0 to VT.RootNodeCount - 1 do
begin
// Get …Run Code Online (Sandbox Code Playgroud)