2017-02-08 8 views
0

実行時にStringGridを作成できません。私はこれのようなもので経験したことはありません、誰もこれを行う方法を説明できますか?これは、あなたがMyGrid変数を宣言しておりますので、私は今のところ...また、あなたのグリッドの親MyGrid.Parent := Self;実行時に動的に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

何あなたのコードが欠落している、あなたは、ローカル変数MyStringGridは必要ありませんしたコードですフォームレベルで

あなたが避けるべきもう1つのことは、独自のコードでグローバル変数を通してフォームを参照することです。代わりに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; 
関連する問題