【问题标题】:How can I hide a TVirtualStringTree node?如何隐藏 TVirtualStringTree 节点?
【发布时间】:2011-08-23 17:55:35
【问题描述】:

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

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

我的树的结构:

  • 一个节点
  • 另一个节点
    • 子节点 1
    • 子节点 2
    • ...
    • 子节点 15
    • 子节点 16(不可见!)
  • 又一个节点
    • 子节点 1 来自另一个节点
    • 子节点 2 来自另一个节点

当我执行 FirstNode/GetNextNode 循环时,我可以找到子节点 16 整个树,让我打印出第一列的文本。我可以 还要检查节点,看看他有一个以前的兄弟姐妹,但没有 例如下一个兄弟节点,节点高度为 18。

那么我是怎么做到的呢?

【问题讨论】:

  • 欢迎来到 Stack Overflow。在目前的状态下,这个问题需要我们猜测,我们都不会从中受益。请提供用于填充树的代码示例,以及生成上述文本的验证码。
  • 这是某种游戏节目,我们必须猜测您的代码,最好的猜测赢得快艇?

标签: delphi virtualtreeview tvirtualstringtree


【解决方案1】:

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

你错了,有可能既有不可见节点又有禁用节点。要切换节点的可见状态,请使用

vtree.IsVisible[Node] := boolean;

启用/禁用节点使用

vtree.IsDisabled[Node] := boolean;

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

【讨论】:

  • +1 用于使用.IsVisible[],它调整树视图画布的整体高度,以便垂直滚动条反映隐藏的节点。如果您只是使用Exclude(Node.States, vsVisible)Node.States := Node.States - vsVisible 从节点中删除可见状态,它不会调整树视图的画布高度,垂直滚动条不会改变,并且用户可能会在下面有很多空白最后显示的节点。
【解决方案2】:

除了 ains 答案之外,要递归树,您还可以使用以下函数:

递归所有节点

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

仅递归可见节点:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多