【问题标题】:How to avoid having a fixed column when adding columns dynamically to a TStringGrid at runtime?在运行时将列动态添加到 TStringGrid 时如何避免固定列?
【发布时间】:2012-02-27 11:16:47
【问题描述】:

我正在使用 Lazarus 0.9.30.2。 我有一个标准的 TForm,上面有一个标准的 TStringGrid。字符串网格在设计时没有列或行。在 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.                                                                                                                                              

【问题讨论】:

    标签: fixed lazarus tstringgrid


    【解决方案1】:

    我认为这是一种功能(或从另一个角度来看的错误)。如果在设计时您的字符串网格为空(0 列,0 行),则在运行时添加列时,以下属性将设置为默认的存储值。

    如何解决:

    我怀疑TCustomGrid.AdjustCount 程序,但这只是一个疯狂的猜测,而且离题了。

    【讨论】:

    • 你好@TLama ....我在发布后又玩了一点,并确认了你在评论中所说的一切。在运行时,默认情况下会添加一个固定列。如果我在设计时将任何类型的列添加到网格中,则不会添加固定列。我最终做的是动态添加我的所有列,然后在结束时设置 'FixedCol := 0'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2016-07-15
    • 2011-07-16
    • 2017-04-30
    • 1970-01-01
    • 2013-12-26
    相关资源
    最近更新 更多