我们正在将应用程序从XE6迁移到Berlin 10.1,并且自定义网格样式无法正常工作。作为测试,我回到XE6来查看使用TCheckcolumn时的默认gridstyle和checkcellstyle,它工作正常。然后,我去了柏林10.1,并在使用TCheckcolumn时测试了默认的gridstyle和checkcellstyle,它不起作用。也就是说,除非您单击网格中的行,否则不会显示该复选框。在显示该行之后,您将无法选中或取消选中它。这是一个错误还是在10.1柏林中我们还需要做其他事情?

最佳答案

XE6 FMX.Grid和Delphi 10.1 Berlin FMX.Grid(特别是TCheckColumn)之间的区别在于,即使链接的TValueEmpty,在XE6中复选框也可见。直到D10西雅图,情况才如此。在D10.1柏林中对此进行了更改,以便仅在链接的TValueFalseTrue时,复选框才可见。如果TValueEmpty,则不显示该复选框。

在柏林D10.1中,以下测试(类似于文档示例)对我有效:

type
  TForm27 = class(TForm)
    Grid1: TGrid;
    Column1: TColumn;
    CheckColumn1: TCheckColumn;
    StringColumn1: TStringColumn;
    procedure Grid1GetValue(Sender: TObject; const ACol, ARow: Integer;
      var Value: TValue);
    procedure Grid1SetValue(Sender: TObject; const ACol, ARow: Integer;
      const Value: TValue);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    Arr: array of TValue;
  public
    { Public declarations }
  end;

implementation

procedure TForm27.FormCreate(Sender: TObject);
begin
  SetLength(Arr, Grid1.RowCount);
end;

procedure TForm27.Grid1GetValue(Sender: TObject; const ACol, ARow: Integer;
  var Value: TValue);
begin
  if ACol = 1 then
    Value := Arr[ARow];
end;

procedure TForm27.Grid1SetValue(Sender: TObject; const ACol, ARow: Integer;
  const Value: TValue);
begin
  if ACol = 1 then
   Arr[ARow] := Value.AsBoolean;
end;


在运行时看起来像这样:

delphi - Grid的TCheckColumn在Delphi 10.1柏林firemonkey应用程序中不起作用-LMLPHP

在这里,我访问了三行,它们显示了复选框。

为了比较XE6测试;

delphi - Grid的TCheckColumn在Delphi 10.1柏林firemonkey应用程序中不起作用-LMLPHP

10-06 03:37