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

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

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

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

enter image description here

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

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 Ответ

4 голосов
/ 01 марта 2012

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...