unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var btn: TButton; begin {如果 Panel1 不存在则退出} if Panel1 = nil then Exit; {第一次 btn 依附窗体创建, 也就是它的 Owner 属性是窗体} btn := TButton.Create(Self); btn.Parent := Self; btn.Caption := btn.Owner.ClassName + '- btn'; btn.Left := 0; btn.Top := 0; {第二次 btn 依附 Panel1 创建, 也就是它的 Owner 属性是 Panel1} btn := TButton.Create(Panel1); btn.Parent := Self; btn.Caption := btn.Owner.ClassName + '- btn'; btn.Left := 0; btn.Top := btn.Height; end; procedure TForm1.Button2Click(Sender: TObject); begin {当 btn 做依附的 Owner 属性对象销毁时, 它也随之销毁} Panel1.Free; end; end.
//效果图: