如何在运行时动态创建StringGrid?

时间:2017-02-08 11:28:58

标签: delphi delphi-xe

我在运行时创建StringGrid时遇到问题。记住,我不是那种经验丰富的人,有谁能解释如何做到这一点?这是我到目前为止的代码......

unit uDynStringGrid;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, grids;

type
  TfrmMyForm = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
  private
    MyGrid : TStringGrid ;
  public
    { Public declarations }
  end;

var
  frmMyForm: TfrmMyForm;

implementation

{$R *.dfm}

procedure TfrmMyForm.FormCreate(Sender: TObject);
var
  MyStringGrid : TStringGrid ;
begin
  MyStringGrid := TStringGrid.Create(frmMyForm);
  MyStringGrid.Visible := true ;
  MyStringGrid.left := 20 ;
  MyStringGrid.top := 20 ;
  MyStringGrid.rowcount := 5 ;
  MyStringGrid.colcount := 5 ;
  MyStringGrid.width := 100 ;
  MyStringGrid.height := 100 ;
  MyStringGrid.Enabled := true ;
  MyStringGrid.cells[1,1] := 'hi' ;
  MyGrid := TStringGrid.Create(frmMyForm) ;
  MyGrid := MyStringGrid ;
end;

end.

1 个答案:

答案 0 :(得分:0)

您的代码缺少的是设置网格父MyGrid.Parent := Self;

此外,您不需要本地变量MyStringGrid,因为您在表单级别声明了MyGrid变量。

您应该避免的另一件事是在自己的代码中通过全局变量引用表单。请改用Self

procedure TfrmMyForm.FormCreate(Sender: TObject);
begin
  MyGrid := TStringGrid.Create(Self);
  MyGrid.Parent := Self;
  MyGrid.Visible := true;
  MyGrid.left := 20;
  MyGrid.top := 20;
  MyGrid.rowcount := 5;
  MyGrid.colcount := 5;
  MyGrid.width := 100;
  MyGrid.height := 100;
  MyGrid.Enabled := true;
  MyGrid.cells[1, 1] := 'hi';
end;