如何知道一个节点是 Virtual TreeView 中的根节点?
How to know a node is root in Virtual TreeView?
我正在使用虚拟树视图。有没有可靠的方法知道一个节点是否是根节点?
我尝试使用
if not Assigned(Node.Parent) then
Output('This is root')
else
Output('This is not root')
但是不起作用。
我尝试使用
if Node = tvItems.RootNode then
Output('This is root')
else
Output('This is not root')
但也不行。
VTV
(或VST
)中的最终根节点是一个特殊的不可见节点,它充当所有用户创建的根节点(使用parent = nil
创建的节点)的父节点。这个特殊的不可见节点通过设计将其 NextSibling
和 PrevSibling
属性设置为指向自身。
要检测节点是否为根节点(在用户创建根的意义上),您可以例如做:
procedure TForm16.tvItemsNodeClick(Sender: TBaseVirtualTree;
const HitInfo: THitInfo);
begin
if HitInfo.HitNode.Parent.NextSibling = HitInfo.HitNode.Parent then
Caption := 'Root node'
else
Caption := 'Not root node';
end;
或者,正如 OP 所评论的,并且不使用内部实现细节:
procedure TForm16.tvItemsNodeClick(Sender: TBaseVirtualTree;
const HitInfo: THitInfo);
begin
if HitInfo.HitNode.Parent = Sender.RootNode then
Caption := 'Root node'
else
Caption := 'Not root node';
end;
参考:TBaseVirtualTree.RootNode 属性(在帮助中)
我正在使用虚拟树视图。有没有可靠的方法知道一个节点是否是根节点?
我尝试使用
if not Assigned(Node.Parent) then
Output('This is root')
else
Output('This is not root')
但是不起作用。
我尝试使用
if Node = tvItems.RootNode then
Output('This is root')
else
Output('This is not root')
但也不行。
VTV
(或VST
)中的最终根节点是一个特殊的不可见节点,它充当所有用户创建的根节点(使用parent = nil
创建的节点)的父节点。这个特殊的不可见节点通过设计将其 NextSibling
和 PrevSibling
属性设置为指向自身。
要检测节点是否为根节点(在用户创建根的意义上),您可以例如做:
procedure TForm16.tvItemsNodeClick(Sender: TBaseVirtualTree;
const HitInfo: THitInfo);
begin
if HitInfo.HitNode.Parent.NextSibling = HitInfo.HitNode.Parent then
Caption := 'Root node'
else
Caption := 'Not root node';
end;
或者,正如 OP 所评论的,并且不使用内部实现细节:
procedure TForm16.tvItemsNodeClick(Sender: TBaseVirtualTree;
const HitInfo: THitInfo);
begin
if HitInfo.HitNode.Parent = Sender.RootNode then
Caption := 'Root node'
else
Caption := 'Not root node';
end;
参考:TBaseVirtualTree.RootNode 属性(在帮助中)