gpt4 book ai didi

delphi - 如何选择VirtualStringTree中的所有根节点或所有子节点?

转载 作者:行者123 更新时间:2023-12-03 15:06:20 26 4
gpt4 key购买 nike

我想选择所有根节点或所有子节点(不是 VirtualTreeView 中的所有节点)。
我尝试使用此代码来选择所有根节点:

procedure SelectAllRoots;
var
Node: PVirtualNode;
begin
Form1.VirtualStringTree1.BeginUpdate;
Node := Form1.VirtualStringTree1.GetFirst;
while True do
begin
if Node = nil then
Break;
if not (vsSelected in Node.States) then
Node.States := Node.States + [vsSelected];
Node := Form1.VirtualStringTree1.GetNext(Node);
end;
Form1.VirtualStringTree1.EndUpdate;
end;

我可以看出有一个小故障。选择不完整或被卡住。我做错了什么?

编辑:
我使用多重选择。

最佳答案

1。选择所有根节点:

要选择所有根节点,您可以使用以下过程:

procedure SelectRootNodes(AVirtualTree: TBaseVirtualTree);
var
Node: PVirtualNode;
begin
AVirtualTree.BeginUpdate;
try
Node := AVirtualTree.GetFirst;
while Assigned(Node) do
begin
AVirtualTree.Selected[Node] := True;
Node := AVirtualTree.GetNextSibling(Node);
end;
finally
AVirtualTree.EndUpdate;
end;
end;

2。选择所有子节点:

要选择所有级别独立的子节点,您需要使用如下递归函数:

procedure SelectChildNodes(AVirtualTree: TBaseVirtualTree);
var
Node: PVirtualNode;

procedure SelectSubNodes(ANode: PVirtualNode);
var
SubNode: PVirtualNode;
begin
SubNode := AVirtualTree.GetFirstChild(ANode);
while Assigned(SubNode) do
begin
SelectSubNodes(SubNode);
AVirtualTree.Selected[SubNode] := True;
SubNode := AVirtualTree.GetNextSibling(SubNode);
end;
end;

begin
AVirtualTree.BeginUpdate;
try
Node := AVirtualTree.GetFirst;
while Assigned(Node) do
begin
SelectSubNodes(Node);
Node := AVirtualTree.GetNextSibling(Node);
end;
finally
AVirtualTree.EndUpdate;
end;
end;

关于delphi - 如何选择VirtualStringTree中的所有根节点或所有子节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12142258/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com