刚学delphi不久,所以不太熟悉一些基本的东西。
我现在想动态创建一些控件,比如TButton,我按自己的思路写的代码如下:procedure TForm1.Button1Click(Sender: TObject);
var
  bt1 : TButton;
begin
  bt1 := TButton.Create(Form1);
  bt1.Caption := 'myButton';
  bt1.Left := 50;
  bt1.Top := 50;
  bt1.Show;
  // bt1.Free;
end;
发现这样好像是不对的,所以想请教大家。
还有,我这样申请的内存,应该要Free吧,我只知道再上面的那种Free方法。但是如果是在函数体外,我怎么去Free啊!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      bt1 : TButton;
    begin
      bt1 := TButton.Create(nil);
      bt1.Caption := 'myButton';
      bt1.Left := 50;
      bt1.Top := 50;
      bt1.parent:=Form1;
      bt1.Visible:=True;
    end;退出时bt1.free
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      bt1 : TButton;
    begin
      bt1 := TButton.Create(Self);
      bt1.Name:='Mybuttom';
      bt1.Caption := 'myButton';
      bt1.Left := 50;
      bt1.Top := 50;
      bt1.parent:=Form1;
      bt1.Visible:=True;end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      if Form1.FindComponent('Mybuttom')<>nil then
         Form1.FindComponent('Mybuttom').Free;
    end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      bt1 : TButton;
    begin
      bt1 := TButton.Create(Form1);
      Bt1.parent:=Form1;
      bt1.Caption := 'myButton';
      bt1.Left := 50;
      bt1.Top := 50;
      bt1.visible:=true;
    bt1.Free;
    end;
      

  4.   

    不用Free,因为bt1的owner是Form1,当form1释放时会自动释放bt1
    看看TComponent的代码就知道了procedure TForm1.Button1Click(Sender: TObject);
    var
      bt1 : TButton;
    begin
      bt1 := TButton.Create(Self);
      Bt1.parent:=Self;
      bt1.Caption := 'myButton';
      bt1.Left := 50;
      bt1.Top := 50;
      bt1.visible:=true;
    end;
      

  5.   

    嗯,create的时候指定了owner,就交给owner free了,如果是create(nil)采用
      

  6.   

    由 Component 继承的组件可以由 Owner 来释放