【问题标题】:Delphi: checking selection in Tree ViewDelphi:检查树视图中的选择
【发布时间】:2011-07-27 02:45:38
【问题描述】:

有一个包含 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 级),如何在不检查(选择与否)的情况下一次添加所有“子”项?例如。我选择了 3 个级别为 0 的项目,并将它们的子项添加到备忘录中。

感谢您的帮助!

【问题讨论】:

    标签: delphi select treeview


    【解决方案1】:

    仅获取具有选定父级的 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;
    

    【讨论】:

    • 你能补充一下代码吗?如果也选择了孩子,我需要添加 Sub.Text。不仅是您的代码中的父母。谢谢!
    • 不需要在第二个代码 sn-p 中检查 Assigned(Parent) 就像 David H 在他的回答中评论的那样。但是这个假设需要将完全布尔评估{$B}设置为False,无论如何都应该如此。
    【解决方案2】:

    在我看来,您正在寻找所有具有父节点的选定节点。最简单的方法如下:

    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
    

    【讨论】:

    • 谢谢!但这对父母不起作用:(只添加了孩子。
    • @maxfax 我以为你只想添加孩子。
    • 似乎我不完全理解您想要什么,但事实仍然是测试是否分配了Parent 是一种有用的技术。 TTreeNodeLevel 属性简单地遍历 Parent 链,计算有多少父母。
    • 谢谢!为答案和评论 +1!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 2011-09-21
    • 2023-04-06
    相关资源
    最近更新 更多