unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure LabelClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
  //动态创建Label控件,也可以是其它继承自TGraphicControl的控件
  with TLabel.Create(self) do begin 
    parent:=self;
    width:=50;
    height:=20;
    left:=20;
    top:=20;
    caption:='abc';
    OnClick:=LabelClick; //单击事件
  end;
end;procedure TForm1.LabelClick(Sender: TObject); //定义的单击事件
begin
  (Sender as TLabel).Free;  //删除,但总是出问题,而继承自TWinContrl的控件却没问题
end;end.//为何在动态创建的控件中的单击事件中删除却不行

解决方案 »

  1.   

    LZ可以把问题错误代码贴出来么?或者至少描述下问题步骤和现象?身边没delphi环境不好猜啊
      

  2.   

    .free调用的destory函数,这个空间这个函数的实现方式不一样,TGraphicControl的destory函数里面把Canvas释放了,
    鼠标事件的执行顺序是:down、click、up,如果你click释放了,在up事件里面又调用了canvas肯定会出错的。
      

  3.   

    procedure TForm1.LabelClick(Sender: TObject); //定义的单击事件
    begin
      (Sender as TLabel).Free; //删除,但总是出问题,而继承自TWinContrl的控件却没问题
      //如果想它不报错的话!可以试着加下面一句即可
      Abort;
    end;
      

  4.   

    MouseDown事件是没问题,可以用的,现在用它了
      

  5.   

    恭喜 放在MouseDown 的确好用了