1.ListView中如何固定一列的宽度,使其不能用鼠标拖动改变列宽?设maxwidth好象不行.
2.每行前有个checkbox,如何才能知道哪行的checkbox的checked发生了改变?

解决方案 »

  1.   

    1、有个苯办法, 把column的MaxWidth、MinWidth和Width设成一样的值试试.2、if ListView1.Items.Item[0].Checked then
       begin
         //...
       end;
      

  2.   

    1.把column的MaxWidth、MinWidth和Width设成一样的值还是能拉开,只不过拉了会缩回去,我想要不能拉开的有没有办法?
    2.可能是我表述的不清楚.比如ListView中有几行数据,每行前面的checkbox有的已打勾有的没打勾,怎样才能知道打勾情况发生了改变?change事件对其他列也响应,我想要个只对打勾情况改变响应的东东.
      

  3.   

    问题2:
    下面的代码都有BUG,就是如果用Space来Check Box,那么,不会有效果!
    请在ListView的OnMouseUp中设置:
    procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton; 
      Shift: TShiftState; X, Y: Integer); 
    var 
      Item: TListItem; 
      HitTest: THitTests; 
    begin 
      Item := ListView1.GetItemAt(x, y);   HitTest := ListView1.GetHitTestInfoAt(x, y);   if (Item <> nil) and (HitTest = [htOnStateIcon]) then 
      begin 
        // Example 
        // 
        //  if Item.Checked = False then 
        //  begin 
        //    if (Item.Index = 0) or (ListView1.Items.Item[Item.Index - 1].Checked = True) then 
        //      Item.Checked := True else Item.Checked := False; 
        //  end else 
        //    begin 
        //    if (Item.Index = ListView1.Items.Count - 1) or (ListView1.Items.Item[Item.Index + 1].Checked = False) then Item.Checked := False else 
        //      Item.Checked := True; 
        //  end; 
      end; 
    end; 
    *********************************
    也可以用下面的代码,放在OnChange事件中:
    var
      Item              : TListItem;
      Pos               : TPoint;
    begin
      if Item.Checked then
      ............
    end;