2017-02-08 44 views
0

我在運行時創建StringGrid時遇到問題。記住我並不是那種經驗豐富的人,任何人都可以解釋如何做到這一點?這是我到目前爲止的代碼...如何在運行時動態創建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. 

回答

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;