我正在使用虚拟树视图。有没有可靠的方法来知道节点是否是根节点?
我尝试使用
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 Property (in Help(