我有一个从第三方项目文件填充的对象列表。该文件的设计方式是使每个项目都位于层次结构的“级别”上。因此第一个项目位于级别 0,其所有子项目位于级别 1,依此类推。
举个例子:
1. Node 1 (Level 0)
2. Node 1.1 (Level 1)
3. Node 1.2 (Level 1)
4. Node 1.3 (Level 1)
5. Node 1.3.1 (Level 2)
6. Node 1.4 (Level 1)
7. Node 2 (Level 0)
8. Node 2.1 (Level 1)
9. Node 2.1.1 (Level 2)
10. Node 3 (Level 0)
这将产生如下所示的层次结构:
- Node 1
--- Node 1.1
--- Node 1.2
--- Node 1.3
----- Node 1.3.1
--- Node 1.4
- Node 2
--- Node 2.1
----- Node 2.1.1
- Node 3
我的问题是弄清楚如何根据每个列出的对象的这些“级别”属性将此结构填充到 VCL TTreeView
中。如果我设计了这个第三方文件结构,我会使用父属性而不是级别属性。
此列表中的对象可以像这样迭代:
var
I: TMyItem;
N: TTreeNode;
begin
for X := 0 to MyList.Count - 1 do begin
I := MyList[X];
//TMyItem has property "Level" which specifies hierarchy
// as well as "Title" property for the node's caption
//How to create node based on Level?
N.Data := I;
end;
end;
基于这个结构,我如何在 TreeView 中填充它?
最佳答案
尝试这样的事情:
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;
关于delphi - 如何使用 "levels"填充基于平面列表的 TreeView ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772367/