【问题标题】:Delphi 11 - TTreeView - How set Checkbox value for items in a nodeDelphi 11 - TTreeView - 如何为节点中的项目设置复选框值
【发布时间】:2021-12-09 19:51:24
【问题描述】:

我想在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;

【问题讨论】:

    标签: delphi-11-alexandria


    【解决方案1】:

    您可以尝试在您的过程 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 2019-11-05
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多