Delphi 如何隐藏TVirtualStringTree节点?

Delphi 如何隐藏TVirtualStringTree节点?,delphi,virtualtreeview,tvirtualstringtree,Delphi,Virtualtreeview,Tvirtualstringtree,如果我没有弄错的话,在一个系统中不可能有不可见的节点 TVirtualStringTree树视图,因为没有启用、可见或其他 属性这样做。我说的对吗 如果是,我是如何设法拥有一个不可见的节点的 我的树的结构: 一个节点 另一个节点 子节点1 子节点2 子节点15 子节点16(不可见!) 还有一个节点 来自另一个节点的子节点1 来自另一个节点的子节点2 当我在服务器上执行FirstNode/GetNextNode循环时,我可以找到子节点16 整棵树,让我打印出第一列的文本。我可以 还要

如果我没有弄错的话,在一个系统中不可能有不可见的节点 TVirtualStringTree树视图,因为没有启用、可见或其他 属性这样做。我说的对吗

如果是,我是如何设法拥有一个不可见的节点的

我的树的结构:

  • 一个节点
  • 另一个节点
    • 子节点1
    • 子节点2
    • 子节点15
    • 子节点16(不可见!)
  • 还有一个节点
    • 来自另一个节点的子节点1
    • 来自另一个节点的子节点2
当我在服务器上执行FirstNode/GetNextNode循环时,我可以找到子节点16 整棵树,让我打印出第一列的文本。我可以 还要检查节点,看看他是否有以前的兄弟姐妹,但没有 例如,下一个同级节点,节点高度为18

我是怎么做到的

如果我没有弄错的话,在TVirtualStringTree树视图中不可能有不可见的节点,因为没有启用、可见或其他属性可以这样做。我说的对吗

您错了,可能同时存在不可见和禁用的节点。要切换节点的可见状态,请使用

vtree.IsVisible[Node] := boolean;
vtree.IsDisabled[Node] := boolean;
要启用/禁用节点,请使用

vtree.IsVisible[Node] := boolean;
vtree.IsDisabled[Node] := boolean;

您还可以通过将
ivsDisabled
添加到
InitialStates
参数,在树的
OnInitNode
事件中将节点初始化为禁用状态。

除了AIN应答,要递归树,您可以使用以下函数:

递归所有节点

Tree.GetFirst();
Tree.GetNext();
Tree.GetPrevious();
要仅递归可见节点,请执行以下操作:

Tree.GetFirstVisible();
Tree.GetNextVisible();
Tree.GetPreviousVisible();

欢迎来到堆栈溢出。在目前的情况下,这个问题需要我们猜测,而我们都不会从中受益。请提供填充树的代码示例,以及生成上述文本的验证代码。这是一种游戏秀,我们必须猜测您的代码,并且最佳猜测赢得快艇吗?+1用于使用
。IsVisible[]
,它调整树视图画布的总体高度,以便垂直滚动条反映隐藏节点。如果只需使用
Exclude(node.States,vsVisible)
node.States:=node.States-vsVisible
从节点中删除可见状态,则不会调整树视图的画布高度,垂直滚动条不会更改,并且用户在最后显示的节点下可能会有大量空白。