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

How can I dynamically create a StringGrid at runtime?

我在运行时创建 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.

您的代码缺少的是设置您的网格父级 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;