有一个包含2个级别项目的树视图。我需要将所有选定的“子”(1级)项目的文本添加到备忘录中。
for i := 0 to pred(TreeView1.Items.count) do
if (TreeView1.Items.Item[i].Selected) and (TreeView1.Items.Item[i].Level=1)
then
begin
Memo1.Lines.Add(TreeView1.Items.Item[i].Text)
end;
但是,如果选择了父级(级别0),如何在不检查(选择或不选择)的情况下立即添加所有“子”项目?例如。我选择级别为0的3个项目,并将他们的孩子添加到备忘录中。
感谢您的帮助!
答案 0 :(得分:3)
仅获取具有所选父级的1级节点:
var
Node: TTreeNode;
Sub: TTreeNode;
begin
Node := TreeView.Items.GetFirstNode;
while Node <> nil do
begin
if Node.Selected then
begin
Sub := Node.GetFirstChild;
while Sub <> nil do
begin
Memo1.Lines.Add(Sub.Text);
Sub := Sub.GetNextSibling;
end;
end;
Node := Node.GetNextSibling;
end;
end;
因评论而更新:
获取具有所选父级的1级节点,或者自行选择:
var
I: Integer;
begin
for I := 0 to TreeView.Items.Count - 1 do
with TreeView.Items[I] do
if (Level = 1) and (Selected or Parent.Selected) then
Memo1.Lines.Add(Text);
end;
答案 1 :(得分:1)
在我看来,您正在寻找具有父节点的所有选定节点。最简单的方法如下:
procedure EnumerateSelectedNonTopLevelItems(TreeView: TTreeView; List: TStrings);
var
Node: TTreeNode;
begin
for Node in TreeView.Items do
if Node.Selected and Assigned(Node.Parent) then
List.Add(Node.Text);
end;
此例程将为您提供级别为2,3,4等的节点。由于您只有级别0和级别1,这很好。如果您确实需要作为顶级节点的直接后代的节点,那么您可以像这样修改测试:
if Node.Selected and Assigned(Node.Parent) and not Assigned(Node.Parent.Parent) then