如何在Virtual TreeView中确定一个节点是根节点?

4

我正在使用Virtual Tree View。有没有可靠的方法可以知道一个节点是否为根节点?

我尝试使用以下代码:

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')

但是它也不起作用。

1个回答

3

VTV(或 VST)中的最终根节点是一个特殊的不可见节点,充当所有用户创建的根节点(使用 parent = nil 创建的节点)的父节点。这个特殊的不可见节点被设计成具有其 NextSiblingPrevSibling 属性设置为指向它自己。

要检测一个节点是否为根节点(按照用户创建的定义),可以进行以下操作:

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属性(详见帮助)


非常感谢。我还发现另一种检查方式:如果HitInfo.HitNode.Parent = tvItems.RootNode,则... - alancc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接