0

我想将所有复选框设置为TTreeNode.

有没有更简单的方法可以做到这一点,还是有“最佳实践”的方法来做到这一点?

例如,TreeNode.SetAllCheckboxes:=true;

在下面的示例中,我可以将所有复选框设置为 true。

![在此处输入图像描述

在此处输入图像描述

procedure TForm1.TreeView1DblClick(Sender: TObject);
  begin
    TreeViewCheckAllNodes(TreeView1.Selected);
  end;

procedure TForm1.TreeViewCheckAllNodes(treeNode:TTreeNode);
  var
    loop:integer;
    check:boolean;
  begin
    //Check or Uncheck
    check:=true;
    if treeNode.Checked=True then check:=false;
    treeNode.Checked:=check;
    for loop:=0 to treeNode.Count-1  do
      begin
        treeNode[loop].Checked:=check;
      end;
    treeNode.Expand(true);
  end;
4

1 回答 1

0

您可以尝试在您的过程 CheckAllNodes 中使用递归调用。这将一直选中或取消选中,无论您在所选节点下方是否有多个级别或与所选节点下方的节点有不同数量的级别。

procedure TForm1.CheckAllNodes(treeNode:TTreeNode; Check: boolean);
begin
   while (treeNode<> nil) do
   begin
     treeNode.Checked := Check;
     CheckAllNodes(treeNode.getFirstChild, Check);
     if treeNode<> Form1.TreeView1.Selected then
       treeNode:= treeNode.getNextSibling
     else
       treeNode:= nil;
   end;
end;


procedure TForm1.TreeView1DblClick(Sender: TObject);
begin
  CheckAllNodes(TreeView1.Selected, not TreeView1.Selected.Checked);
end;
于 2022-01-25T19:15:52.680 回答