2011-08-23 60 views
4

如果我没有弄错,不可能在 TVirtualStringTree树视图中看到不可见节点,因为没有启用,可见或其他 属性来执行此操作。我对吗?如何隐藏TVirtualStringTree节点?

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

我的树结构:

One Node 
Another node 
    Subnode 1 
    Subnode 2 
    ... 
    Subnode 15 
    Subnode 16 [which is not visible!] 
Yet another node 
    Subnode 1 from yet another node 
    Subnode 2 from yet another node 

我能找到的子节点16,当我做在 整个树FirstNode/GetNextNode循环,让我打印出来的文本的第一列。我可以 也检查点,看到他有一个同级,但例如没有 下一个兄弟和节点高度为18

所以我怎么做呢?

问候

马库斯

+3

欢迎堆栈溢出。在目前的状态下,这个问题需要我们猜测,我们都不会从中受益。请提供填充树的代码示例以及生成上述文本的验证代码。 – NGLN

+5

这是一种游戏节目,我们必须猜测你的代码,最好的猜测赢得快艇吗? –

回答

21

,如果我没有记错的话这是不可能有隐形节点的树状TVirtualStringTree,因为没有启用,可见光或其他属性这样做。我对吗?

你错了,有可能同时拥有不可见和禁用的节点。要切换节点的可视状态使用

vtree.IsVisible[Node] := boolean; 

启用/禁用节点使用

vtree.IsDisabled[Node] := boolean; 

您也可以初始化树的OnInitNode事件节点为禁用状态,增加ivsDisabledInitialStates参数。

+0

使用'.IsVisible []'调整树视图画布的整体高度,使垂直滚动条反映隐藏节点。如果您仅使用'Exclude(Node.States,vsVisible)'或'Node.States:= Node.States - vsVisible'从节点中删除可见状态,则它不会调整树视图的画布高度,垂直滚动条将会不会改变,并且用户可能会在最后显示的节点下面有很多空白区域。 –

1

除了AINS答案,递归你可以使用下面的功能树:

递归所有节点

Tree.GetFirst(); 
Tree.GetNext(); 
Tree.GetPrevious(); 

递归唯一可见的节点:

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