Как избежать наличия фиксированного столбца при динамическом добавлении столбцов в TStringGrid во время выполнения?

Я использую Lazarus 0.9.30.2. У меня есть стандартный TForm со стандартной TStringGrid на нем. Строка сетки не имеет столбцов или строк на нем во время разработки. В Инспекторе объектов установлены следующие значения.

ColCount = 0
Columns = 0
FixedCols = 0
FixedRows = 0
RowCount = 0

Я хочу добавить несколько TGridColumns во время выполнения, и я смог это сделать, но всегда получаю фиксированный столбец, который мне не нужен. Для этого я написал код, очень похожий на приведенный ниже пример. Когда я компилирую и запускаю его, я получаю следующее.

введите описание изображения здесь

Как получить кожуру фиксированного столбца во время выполнения и просто оставить оставшиеся столбцы?

unit test;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids;

type
  TForm1 = class(TForm)
    SgGrid: TStringGrid;
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1; 

implementation

{$R *.lfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  GridColumn : TGridColumn;
  anIndex    : integer;
begin
  for anIndex := 0 to 5 do
    begin
      GridColumn := SgGrid.Columns.Add;
      GridColumn.Width := 50;
      GridColumn.Title.Caption := 'Col ' + inttostr(anIndex);
    end; {for}
end;

end.                                                                                                                                              

1 ответ

Решение

Я думаю, что это такая особенность (или ошибка с другой точки зрения). Если во время разработки ваша строковая сетка пуста (0 столбцов, 0 строк), во время выполнения, когда вы добавляете столбец, для следующих свойств устанавливаются сохраненные значения по умолчанию.

  • TStringGrid.RowCount
  • TStringGrid.FixedRows
  • TStringGrid.FixedCols

Как обойти это:

  • либо установить TStringGrid.FixedCols до 0 во время выполнения после добавления хотя бы одного столбца, для вашего случая просто после добавления всех их

  • или установить TStringGrid.ColCount а также TStringGrid.FixedRows до 1 во время разработки, вы увидите столбец, но TStringGrid.Columns коллекция остается пустой, поэтому нет необходимости беспокоиться о том, что вы получите один дополнительный столбец во время выполнения (в Delphi, например, вы даже не можете установить ни столбец, ни количество строк в 0)

Я подозреваю TCustomGrid.AdjustCount процедура, но это просто дикое предположение и не по теме здесь.

Другие вопросы по тегам