How to populate a tree view based on a flat list with “levels”?

前端 未结 2 642
时光说笑
时光说笑 2020-12-06 13:23

I have a list of objects populated from a third-party project file. The way this file was designed is so each item is on a \"level\" of hierarchy. So the very first item is

2条回答
  •  情深已故
    2020-12-06 14:12

    Try something like this:

    var
      Item: TMyItem;
      Node: TTreeNode;
      NodeLevel: Integer;
      X: Integer;
    begin
      Node := nil;
      NodeLevel := 0;
      for X := 0 to MyList.Count-1 do
      begin
        Item := MyList[X];
        if (Node = nil) or (Item.Level <= 0) then
        begin
          Node := TreeView1.Items.AddObject(nil, Item.Text, Item);
          NodeLevel := 0;
        end
        else if Item.Level = NodeLevel then
        begin
          Node := TreeView1.Items.AddObject(Node, Item.Text, Item);
        end else
        begin
          while Item.Level <= NodeLevel do
          begin
            Node := Node.Parent;
            Dec(NodeLevel);
          end;
          Node := TreeView1.Items.AddChildObject(Node, Item.Text, Item);
          Inc(NodeLevel);
        end;
        // set Node properties as needed...
      end;
    end;
    

提交回复
热议问题