你直接调用它的 Free 方法就行了啊

解决方案 »

  1.   

    procedure DoClick(Sender: TObject);
    begin
        Sender.Free;
    end;在控件创建时,加上一条:xxx.OnClick=DoClick;
      

  2.   

    如果在控件的单击事件中free,有可能会报错
    重载窗体的wndproc方法,响应控件发出的消息,这样就安全了
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure WndProc(var Msg: TMessage); override;
      private
        { Private declarations }
         Button2:TButton;
      public
        { Public declarations }
      end;var
      Form1: TForm1;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
       Button2:=TButton.Create(Application);
       Button2.Top:=100;
       Button2.Left:=100;
       Button2.Visible:=True;
       Button2.Width:=100;
       Button2.Height:=50;
       Button2.Parent:=Form1;
       Button2.OnClick:=Form1.Button2Click;
    end;procedure TForm1.WndProc(var Msg: TMessage);
    begin
      if Msg.Msg=9999 then
      begin
        Button2.Free;
        inherited;
      end
      else
        inherited;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
       SendMessage(Form1.Handle,9999,0,0);
    end;