Ben*_*iss 5 delphi delphi-7 virtualtreeview tvirtualstringtree
我想选择所有根节点或所有子节点(不是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;
Run Code Online (Sandbox Code Playgroud)
我可以说有一个小故障.选择不完整或卡住.我究竟做错了什么 ?
编辑:
我使用MultiSelection.
TLa*_*ama 11
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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7193 次 |
| 最近记录: |