カスタムStringGrid要素が必要です。 は、私はクラスを作成しました:Delphi:delete TStringGridを削除する
constructor TClassStringGrid.Create(AOwner: TForm);
begin
inherited Create(nil);
myGroupBox1 := TGroupBox.Create(AOwner);
myGroupBox1.Parent := AOwner;
myStringGrid1 := TStringGrid.Create(self);
myStringGrid1.Parent := myGroupBox1;
myStringGrid1.Options := myStringGrid1.Options + [goEditing];
end;
destructor TClassStringGrid.Destroy;
begin
if myStringGrid1 <> nil then begin
FreeAndNil(myStringGrid1);
end;
if myGroupBox1 <> nil then begin
DestroyComponents;
FreeAndNil(myGroupBox1);
end;
// Call the parent class destructor
inherited;
end;
と
type
TClassStringGrid = class(TCustomControl)
...
私はForm1の中にクラスを作成し、それを示しています。できます。しかし、私がStringGrid(Form1)に値を入れて、Form1を閉じようとすると、FreeAndNil(myStringGrid1);
に「この要素には親ウィンドウがありません」という例外が発生します。 Destroyで何が問題になっていますか? 私があなたに提供できる情報があれば、私は感謝しています。あなたは、このコントロールのグループボックス内の文字列のグリッドを表示したいと仮定すると、
なぜ継承されたか(nil);継承されていないCreate(aOwner)? – GuidoG
所有権がひどく混乱しています。サブコントロールに作成し、それらの両方を所有させます。しかし、あなたはそれらのサブコントロールを破壊する責任を負います。 1.継承されたコンストラクタに 'AOwner'を渡します。 2. 2つのサブコントロールの 'Owner 'として' nil'を渡します。 3.デストラクタの2つのサブコントロールで 'Free'を呼び出します。 4.デストラクタから他のすべてのコードを削除します。 –
ありがとうございました!私は3つのステップを行った:1。 'create(AOwner);' 2. myGroupBox1:= TGroupBox.Create(nil); '3。 'myStringGrid1.Free;'しかし、私はまだエラーがあります。 – genakust