如题,根据listview中的记录内容的不同,理论上有的应该打钩,有的不打钩,如果违反了这个规则就在checkbox状态改变的时候弹出对话框。不晓得如何实现,谢谢!!

解决方案 »

  1.   

    OnChanging事件,回传AllowChange参数
    还有一些增强型的ListView允许按行选择是否显示CheckBox,好像RZ的就可以
    实在不行还可以自己画CheckBox贴上去
      

  2.   

    那就用ImageIndex控制吧。
    弄2个勾,没勾的图片。
      

  3.   

    回答楼上的,我是这样做的,不行。procedure TFormMain.ListViewPaybackChanging(Sender: TObject;
      Item: TListItem; Change: TItemChange; var AllowChange: Boolean);
    begin
      if Item = nil then Exit;
      if Item.Checked and (Item.SubItems[4] <> '') then
        AllowChange := Application.MessageBox('该卡号已有记录,是否使用新数据更新?', '确认',
                                              MB_YESNO) = ID_YES;
    end;
      

  4.   

    你的不行指的什么不行,其实在onclick事件中一样可以做判断,选中checkbox,必然触发click
      

  5.   

    可能是我说的不够准确。
    1.ListView的checkbox属性是True,我用report的显示方式,每行都有checkbox的;
    2.往ListView中添加记录时,每行记录的checkbox状态都事先设置好的;
    3.现在的想法是,不管是用鼠标点击checkbox来改变其选中状态,还是通过键盘上下键配合空格键来改变某行的
      checkbox的选中状态。当选中状态改变时我需要判断一下决定是否弹出对话框提醒一下用户!!ListView的好多事件好像都没有涉及到checkbox的状态改变的,onchange(ing)里面的状态改变好像也只是三种状态的?TItemChange = (ctText, ctImage, ctState);?
      

  6.   

    1.做一函数ChangeItemSelectStatus,用来改变Itme的选中状态,当状态变化时(或符合需要的情况下)弹出提示
    2.处理键盘事件,调用函数ChangeItemSelectStatus
    3.处理鼠标点击事件,调用函数ChangeItemSelectStatus
      

  7.   

    带Checkbox的ListView 
    当我们点击某个Item前面的CheckBox时,怎么才能获得当前这个Item啊?不然怎么去获取Item.SubItems[4]等信息呢?
      

  8.   

    procedure TmainForm.TreeView1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    var
      ht : THitTests;
    begin
      ht := treeview1.GetHitTestInfoAt(x,y);
      if htOnStateIcon in ht then
        treeview1.GetNodeAt(x,y);
    end;
      

  9.   

    楼上的当成是TreeView了,哎,不过类似就是了。我是用GetItemAt(x,y)找到对应的Item的。
    结贴了,希望帮上忙没有帮上忙的朋友继续保持热心!呵呵