Delphi:删除继承的TStringGrid

时间:2016-06-20 10:58:10

标签: delphi

我想要一个自定义的StringGrid元素。 我创建了一个类:

type
  TClassStringGrid = class(TCustomControl)
  ... 

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;

我在Form1中创建了一个类并显示它。有用。但是如果我将一些值放入StringGrid(Form1)然后尝试关闭Form1,我会得到一个异常&#34;该元素没有父窗口&#34;在FreeAndNil(myStringGrid1);。 毁灭有什么不对? 感谢您提供给我的任何信息。

1 个答案:

答案 0 :(得分:1)

假设您要在此控件的“组”框中显示“字符串”网格,那么它应该是这样的:

shell.receive

以这种方式,您新设计的控件是子控件的所有者和父级。因此,销毁是自动完成的。