3

Lazarus 0.9.30.2 を使用しています。標準の TStringGrid を含む標準の TForm があります。文字列グリッドには、設計時に列も行もありません。Object Inspector では、次の値が設定されています。

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.                                                                                                                                              
4

1 に答える 1

4

私はそれがそのような機能(または別の観点からのバグ)だと思います。設計時に文字列グリッドが空 (0 列、0 行) の場合、実行時に列を追加すると、次のプロパティが既定の保存された値に設定されます。

回避方法:

  • 少なくとも1つの列を追加した後、実行時に を 0 に設定するかTStringGrid.FixedCols、すべての列を追加した直後の場合にのみ

  • または設計時にTStringGrid.ColCountandTStringGrid.FixedRowsを 1 に設定すると、列が表示されますが、TStringGrid.Columnsコレクションは空のままなので、実行時に余分な列が 1 つ取得されることを心配する必要はありません (Delphi では、列や行を設定することさえできません)。 0までカウントする)

私はTCustomGrid.AdjustCount手順を疑っていますが、それは単なる推測であり、ここでは話題から外れています.

于 2012-03-01T00:27:09.857 に答える