listview 属性checkbox 设为 true
一共4个Item,选中第一个,则下面全选,如果下面三个有一个不选中,则第一个也Check =false,
看起来简单,我试了半天也不行,谁做过?
类似:
  All
  Item1
  Item2
  Item3

解决方案 »

  1.   

    呵呵!
    见意你换一下控件,
    用Raize控件包中的RzCheckList控件,
    你选择父时,即自动选择全部子,不用写代码的,控件自动的
    取消选择父时,即取消全部子
      

  2.   

    procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      ht: THitTests;
      pt: TPoint;
      item: TListItem;
      i: integer;
    begin
      GetCursorPos(pt);
      pt:= ListView1.ScreenToClient(pt);
      ht:= ListView1.GetHitTestInfoAt(Pt.x, pt.y);  if htOnStateIcon in ht then
      begin
        item:= ListView1.GetItemAt(Pt.x, Pt.y);
        if not Assigned(item) then exit;
        if Item.Index=0 then
        begin
          if Item.Checked then
          begin
            for i:=1 to 3 do
              ListView1.Items[i].Checked:=true;
          end else begin
            for i:=1 to 3 do
              ListView1.Items[i].Checked:=false;
          end;
        end else begin
           if not Item.checked then
             ListView1.Items[0].checked:=false;
        end;
      end;
    end;
      

  3.   

    to zhuojohn(闲云野鹤)
    如果下面三个都选中,则第一个也选中呢
      

  4.   

    知道了
    procedure TFrm.LvMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      ht: THitTests;
      pt: TPoint;
      Item: TListItem;
      i: integer;
    begin
      GetCursorPos(pt);
      pt:= Lv.ScreenToClient(pt);
      ht:= Lv.GetHitTestInfoAt(Pt.x, pt.y);  if htOnStateIcon in ht then
      begin
        item:= Lv.GetItemAt(Pt.x, Pt.y);
        if not Assigned(item) then exit;
        if Item.Index=0 then
        begin
          if Item.Checked then
          begin
            for i:=1 to Lv.Items.Count-1 do
              Lv.Items[i].Checked:=true;
          end
          else begin
            for i:=1 to Lv.Items.Count-1 do
              Lv.Items[i].Checked:=false;
          end;
        end
        else
        begin
           if not Item.checked then
             Lv.Items[0].checked := false;      if ISCheckAll then
            Lv.Items[0].checked := true;
        end;
      end;
    end;function TFrm.ISCheckAll: Boolean;
    Var
      i: integer;
      LI: TListItem;
      Bol: Boolean;
    begin
      Bol := True;
      For i := 1 to LV.Items.Count-1 do
      begin
        LI := LV.Items.Item[i];
        if LI.Checked = false then
        begin
          Bol := false;
        End;
      End;
      Result := bol;
    End;