Как избежать наличия фиксированного столбца при динамическом добавлении столбцов в 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
процедура, но это просто дикое предположение и не по теме здесь.