【问题标题】:How to auto expand all TTreeView nodes?如何自动展开所有 TreeView 节点?
【发布时间】:2011-08-02 12:48:05
【问题描述】:

我想在应用程序启动时展开主窗体上的树。 我该怎么做?我找不到相应的属性。 C++ 建设者 2009。

【问题讨论】:

    标签: delphi delphi-2009 c++builder


    【解决方案1】:

    有很多方法可以做到这一点。最简单的应该是

    TreeView1.FullExpand;
    

    在接受的答案中 - 或者

    if TreeView1.items.GetFirstNode <> nil then
      TreeView1.items.GetFirstNode.Expand(True);
    

    if TreeView1.items[0] <> nil then
      TreeView1.items[0].Expand(True);
    

    如果您想从不是根节点的特定节点完全展开,则 TTreeNode 上的 Expand 方法很有用。

    【讨论】:

      【解决方案2】:

      添加树节点时,使其扩展属性为true

      你会发现 treeNode 对象的属性,在添加到节点列表之前将其设置为 true。

      您还可以为 treeView 找到一个名为 ExpandAll 的方法

      我的问候


      试试这个代码

      //this will expand all nodes of Level and their parents
      procedure ExpandTree(Tree: TTreeView; Level: integer);
      
        procedure ExpandParents(Node: TTreeNode);
        var
          aNode : TTreeNode;
        begin
          aNode := Node.Parent;
          while aNode <> nil do begin
            if not aNode.Expanded then
              aNode.Expand(false);
            aNode := aNode.Parent;
          end;
        end;
      
      var
        aNode : TTreeNode;
      begin
        if Tree.Items.Count > 0 then begin
          aNode := Tree.Items[0];
      
          while aNode <> nil do begin
            if aNode.Level = Level then begin
              aNode.Expand(false);
              ExpandParents(aNode);
            end;
            aNode := aNode.GetNext;
          end;
        end;
      end;
      
      //this will expand the Node and it's parents
      procedure ExpandNode(Node: TTreeNode);
      var
        aNode : TTreeNode;
      begin
        Node.Expand(false);
      
        aNode := Node.Parent;
        while aNode <> nil do begin
          if not aNode.Expanded then
            aNode.Expand(false);
          aNode := aNode.Parent;
        end;
      end;
      

      并查看参考 http://www.delphipages.com/forum/showthread.php?t=159148

      我的问候

      【讨论】:

      • TTreeView 没有 ExpandAll 方法。 TreeViw 的所有对象都是在设计时间内添加的
      • 在 StackOverflow 上,您不需要使用 /pre 或其他任何东西来格式化代码。您需要做的就是将其缩进四个空格。如果您不使用制表符而是使用空格来缩进您的语句,这也会有所帮助。对于内联代码,您可以用“反引号”字符将代码括起来。反引号 (`) 通常与波浪号 (~) 一起出现。 cmets中也可以使用反引号:like so.
      【解决方案3】:

      您只需在树视图上调用FullExpand()

      【讨论】:

      • 如何在展开而不是结尾时跳转到第一个项目。滚动条位于最大底部。
      • @TheAllSeeingEye 也许使用TopItem 和/或Select
      • @Hidden:我无法弄清楚滚动条的问题。我正在尝试这两件事,但我仍然有这个问题。 tvTreeView.Selected := tvTreeView.TopItemtvTreeView.Select(tvTreeView.Item[0])- 它对我不起作用。你是怎么解决的?
      • 我想通了。问题出在TopItem 属性上,我必须手动设置它。也许它会对某人有所帮助。 tvTreeView.FullExpand;tvTreeView.TopItem := tvTreeView.Items.GetFirstNode;
      • 我认为这就是我在评论中提出的建议
      猜你喜欢
      • 1970-01-01
      • 2013-11-10
      • 2010-10-05
      • 2016-11-18
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      相关资源
      最近更新 更多