代码之家  ›  专栏  ›  技术社区  ›  dummzeuch Stijn Sanders

我可以使一个TTreeNode不可见吗?

  •  5
  • dummzeuch Stijn Sanders  · 技术社区  · 17 年前

    TTreeNode没有Visible属性,因此明显的选项不存在。是否有其他方法使TTreeNode及其所有子节点不可见?当然,我希望以后能再次看到它。

    注意#2:我只需要顶层节点的选项。我想隐藏的人通常都没有孩子。

    6 回复  |  直到 17 年前
        1
  •  7
  •   Argalatyr Rodrigo    17 年前

    这是一个好主意 将数据与用户界面分开 ,树视图的这个问题就是一个很好的例子- . 我通常有一个非可视单元,它包含一个存储数据的结构化类。用户界面单元可以有一个树状视图,它可以显示来自该类的数据(可配置的子集)。有多种方法可以在两者之间移动数据。这种类型的隔离需要一点计划,但提供了更大的灵活性和稳定性。

        3
  •  4
  •   mghie    17 年前

    TTreeView是标准Windows树视图的包装器,从 documentation on MSDN )不允许隐藏树节点。这也是有意义的,因为树视图不能扩展到大量节点,所以隐藏树节点而不是删除所有不必要的内容将是一个坏主意。

    重新添加的节点的事件。为此,您只需设置 有孩子

        4
  •  4
  •   Remy Lebeau    17 年前

    在TTreeView中“隐藏”节点的唯一方法是实际删除它。然后,要“显示”节点,只需再次重新插入即可。

        5
  •  3
  •   dummzeuch Stijn Sanders    12 年前

    我是如何用DXE5和标准TTreeView制作的。我认为这对一些人会有帮助。我已将其简化,例如:

      var
        Node:TTreeNode;
      begin
      ...
      Node:=Tree.Items.AddChild(ParentNode,'Text');
      Node.ImageIndex:=2;
    

      if Node.ImageIndex=2 then
      begin
        DefaultDraw:=false;
        Node.Parent.HasChildren:=false;
      end;
    

    3.使用TTreeView的onClick事件检查:

    var
     Tree:TTreeView;
     Node:TTreeNode;
    begin
      Tree:=Sender as TTreeView;
      if Tree.Selected.Index>-1 then
       if Tree.Selected.HasChildren then
        if Tree.Selected.getFirstChild.ImageIndex=2 then
         showmessage(Tree.Selected.getFirstChild.Text);
    

    完成。我希望它能帮助你。

        6
  •  2
  •   JimPapas    10 年前

    我在扩展事件处理程序上完成了它。

    推荐文章