【问题标题】:How to know a node is root in Virtual TreeView?如何知道节点是 Virtual TreeView 中的根节点?
【发布时间】:2019-09-23 07:20:32
【问题描述】:

我正在使用虚拟树视图。有没有可靠的方法来知道一个节点是否是根节点?

我尝试使用

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

但也不行。

【问题讨论】:

    标签: delphi root virtualtreeview


    【解决方案1】:

    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 属性(在帮助中)

    【讨论】:

    • 非常感谢。我还找到了另一种检查方法: if HitInfo.HitNode.Parent = tvItems.RootNode then...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2011-04-16
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多