在DevExpress的Quantum Grids中,如何使用复选框将单元格的单击区域限制为实际复选框,而不是整个单元格

时间:2010-09-24 13:28:10

标签: delphi devexpress

我使用Delphi(2010)和DevExpress Quantum Grid(v.5.52)

当我有一个带有CheckBox编辑器的TcxGridColumn时,当用户单击单元格中的任何位置时,该复选框会切换。我想限制这一点,以便用户必须单击实际的复选框。

有一种简单的方法吗?我们的应用程序中有大量的网格,其中很多都带有复选框编辑器,所以我希望能为我做一个“神奇”的小技巧。我不想在我们的应用程序中为每个网格编写自定义代码: - /

3 个答案:

答案 0 :(得分:1)

如果您(或您的客户)想要在单元格中单击时立即更改复选框,那么如果您将ImmediatePost属性设置为false,则可能会有所帮助。

答案 1 :(得分:0)

可能不是您正在寻找的确切答案,但也许它可以满足您的客户要求。

对于cxGrid中的每个单元格,您可以打开或关闭ImmediateEditor属性。此属性确定在单击适当的单元格后是否立即激活特定的列编辑器。

从cxGrid版本6的帮助文件:

property ImmediateEditor:Boolean;

描述

使用ImmediateEditor属性确定用户单击适当的单元格时是否激活特定的列编辑器。如果此属性值为False,则当焦点位于特定单元格内时,通过按Enter键激活网格单元格编辑器。

答案 2 :(得分:0)

我向DevExpress发送了同样的问题作为支持请求,我得到了这个答案:

“你好Svein。

感谢您的留言。您可以使用GridView的OnMouseDown事件处理程序并在那里检查命中信息来实现所需的结果。 附件是一个示例,说明如何执行此任务。请尝试此解决方案,并告诉我们您的结果。“

测试项目有一个带复选框列的简单网格。 GridView的OnMouseUp事件具有以下代码:

procedure TForm1.cxGrid1TableView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  AHitTest: TcxCustomGridHitTest;
  ACellViewInfo: TcxGridDataCellViewInfo;
  AEditViewInfo: TcxCustomCheckBoxViewInfo;
  ARect: Trect;
  AValue: Variant;
begin
   AHitTest := TcxGridSite(Sender).GridView.GetHitTest(X, Y);
   if AHitTest is TcxGridRecordCellHitTest then
   begin
     ACellViewInfo := TcxGridRecordCellHitTest(AHitTest).ViewInfo as TcxGridDataCellViewInfo;
     if ACellViewInfo.EditViewInfo is TcxCustomCheckBoxViewInfo then
     begin
       AEditViewInfo := TcxCustomCheckBoxViewInfo(ACellViewInfo.EditViewInfo);
       ARect := AEditViewInfo.CheckBoxRect;
       if PtInRect(ARect, Point(X, Y)) then
       begin
         AValue := ACellViewInfo.GridRecord.Values[ACellViewInfo.Item.Index];
         TcxGridTableView(TcxGridSite(Sender).GridView).DataController.SetEditValue(
           ACellViewInfo.Item.Index, AValue = false, evsValue);
       end;
     end;
   end;
end;

不幸的是,由于MouseUp事件在网格而不是列上,我无法为我的checkbox-columns创建一个repository-item,但至少现在我知道了一种方法。