我给MultiSelectLevel属性设置成-1后
树形列表里所有的项前都有复选框了。
我现在想实现:勾选父节点后,如父节点被选择,则对应的子节点都为勾选状态,否则子节点都不为勾选状态
在父节点勾选状态中,去掉其子节点中任意一项的勾选状态,则父节点的勾选状态被取消
该控件无法实现以上效果。如何用代码实现?

解决方案 »

  1.   


    procedure TForm1.fcTreeView1Click(Sender: TObject);
     procedure SetCheck(aItem: TfcTreeNode; Allow: Boolean);
     var
       i: Integer;
     begin
       if (aItem = nil) or (not aItem.HasChildren) then
         Exit
       else
         begin
           for i := 0 to aItem.Count - 1 do
           begin
             aItem.Item[i].Checked := Allow;
             SetCheck(aItem.Item[i], Allow);
           end;
         end;
     end;var
       aItem: TfcTreeNode;
    begin
      with fcTreeView1 do
      begin
        aItem := fcTreeView1.GetNodeAt(ScreenToClient(Mouse.CursorPos).X, ScreenToClient(Mouse.CursorPos).Y);
        SetCheck(aItem, aItem.Checked);
        if (not aItem.Checked) and (aItem.Parent <> nil) then aItem.Parent.Checked := False;
      end;
    end;