unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,ComCtrls;type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;
  sp1:tshape;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
  sp1:=tshape.Create(nil);
  sp1.Parent:=form1.PageControl1.Pages[0];
  sp1.Name:='aaaa';
end;procedure TForm1.Button2Click(Sender: TObject);
var sp1:tshape;
begin
  tshape(form1.PageControl1.Pages[0].FindChildControl('aaaa')).Destroy;
  //sp1.Destroy;
end;end.
点击button1,动态生成 一个tshape,点击button2时删除tshape时老是出错~~要如何才能实现??
麻烦各位大侠支招~~在线等~~

解决方案 »

  1.   

    补充:是要如何根据创建时的NAME来删除这个控件~~
      

  2.   

    控件名.free 不行么
      

  3.   

    FindChildControl只能找TWinControl及其子类,TShape不是TWinControl子类,找出来的是nil,当然会报错
    可以用PageControl1.Pages[0].Controls[]遍历
      

  4.   

    用FindComponent也可以
      

  5.   

    记住 你动态创建的 控件名 或 Handle 然后 用 FindComponent 查到  free掉就行了。 建的时候要记录建的名字或handle,要不你怎么找!
      

  6.   

    直接Free~~
      

  7.   

    freeandnil
      

  8.   

    建立一个保存句柄的数组,保存动态控件的名柄,由数据指定名柄,再Free操作。