让listview控件显示checkbox后,我想中进行单一选择,即只能选择一个checkbox像radiobutton一样,怎样实现?

解决方案 »

  1.   

    在哪儿写,怎么写?用For吗不行的啊
      

  2.   

    设置一个flag,有一个checkbox被选中,flag变为lock状态。其他不能选。
      

  3.   

    思路:以一个变量存储checkbox选中的个数,大于1,就不让它选中。
      

  4.   

    唉,变通啊,哥啊,可以判断有几个选中的checkbox.
    如果是已经有一个,那么之前那个选中的checkbox取消选中状态,
    如果没有就选中。
      

  5.   

    if Item.Checked then
        Label1.Caption:=Item.SubItems.Strings[0];
      for i:=0 to LV_batch.Items.Count-1 do
      begin
        if LV_batch.Items.Item[i]<>Item then
        LV_batch.Items.Item[i].Checked:=False; 
      end;上面的代码是写在change里的,问题是当我从一个被选择的item单击另一个要选择的item时,要单击选择两次,即切换下一个选择的时候不实时,没达到我的要求,大家帮看一下
      

  6.   


    {delphi2010 例子编译通过}
    procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
      Selected: Boolean);
    var
      i: Integer;
    begin
      for I := 0 to ListView1.Items.Count - 1 do
        begin
          ListView1.Items.Item[i].Checked := False;
        end;
      Item.Checked := True;
    end;
      

  7.   


    {另外的方法}
    procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      i,idx: Integer;
    begin
      idx := ListView1.ItemIndex;
      if idx <> -1 then
      begin
      for I := 0 to ListView1.Items.Count - 1 do
        begin
          ListView1.Items.Item[i].Checked := False;
        end;
      ListView1.Items.Item[idx].Checked := True;
      end;
    end;
      

  8.   

    设置一个变量 lstItem:TListItem,用来存储checkbox:=true;每次选中CHeckbox的时候检查lstItem是否为空,不为空则先 lstItem.checked:=false,
    然后再把lstItem设为选中的。
      

  9.   

    不行的,楼上的均不中,因为你们是写在selectitem里的,这样一来,我就必须先选择里面的item,而有时候用户是直接单击item前面的checkbox的
      

  10.   


    procedure OnItemChecked(Sender: TObject; Item: TListItem);
      

  11.   

    楼上的,Delphi7没有这个方法的,你那个方法是在哪个版本里出现的?
      

  12.   

    把Customlistview 的代码复制一份,把里面的checkbox改成radiobutton,不过我看你也不知道怎么弄,会弄也不用来问了,实际上也不需要这样,在customdraw事件自己做更简单,无非就是创建radiobutton,设置一下位置和check属性。看你提问的态度实在不行,也不懂变通,实际上别人的代码都给了,不行就自己调一下。
    11楼的代码,无非就是idx := ListView1.ItemIndex;总是等于-1,聪明的人就会改变一下
    idx := ListView1.GetItemAt(X, Y).Index; 
    可你什么都不会,干脆别写代码了
    就算你照搬代码肯定到时候会出丑,原因自己去想吧
      

  13.   

    直接改 控件代码 思路:
    1.截获 click 消息,
    2.判断 checkbox的区域,
    3.当 鼠标在 click时,如果是在checkbox的区域,直接响应你要的 动作