procedure TForm1.Button1Click(Sender: TObject);
begin
  button1.Free;
end;

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin 
      if Assigned(button1) then
        button1.Free;
    end;
      

  2.   

    就是,其实对象是可以自己释放自己的.关键是要确定自己是由new生成的,并且没有别的对象要删除就可以了.VCL的对象都只能由new产生,所以其Free方法一般包含对delete的调用.故VCL对象的自动释放与Owner并无直接联系,只是Owner调用了其Free函数而已.
      

  3.   

    procedure Tform1.button1click(sender:Tojbect);
    begin
     if assigned(button1) then 
       button1.Free;
    end;
    同意小新
    就是在98下,我想也应该实现的了呀
      

  4.   

    可惜你说的例子并不证明你的观点:点击button,然后button.free,并不是“自己释放自己”,button的onclick事件是属于form的。呵呵,这样做肯定正确。
    如果你试试在formClick事件里面处理一下form.free看看你不出错才怪呢。
    但是,实际上对象是可以释放自己的,不过我忘了怎么做。我记得是thinking in c++那本书讲过!
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form1.Free;
    end;  从任务管理器中可以看到,  该程序还是存在的,虽然不报错,也不可视了
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form1.Free;
    end;  从任务管理器中可以看到,  该程序还是存在的,虽然不报错,也不可视了我现在做的东西,是动态的创建, 在OnClick中赋给一个Free自己的事件, 但是一释放就报错有啥办法解决这个问题
      

  7.   

    你这样做当然出错了,自己释放自己,form.free,释放了,Click函数还得返回,返回到哪儿去呢?form已经free了,呵呵
      

  8.   

    解决的办法,我还没想到:(sorry
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form1.Free;
    end;  从任务管理器中可以看到,  该程序还是存在的,虽然不报错,也不可视了 这儿不出错,实际上是delphi的一个bug,不信,你可以试试在某个事件中声明一个对象,但是不初始化(不要create),然后直接free,会出现同样的情况。如果你在跟踪一下源代码,好看了....呵呵(记得跟踪源代码的时候设置一下library的路径,因为默认的vcl源代码路径不包括好多对象的)
      

  10.   

    最后我用postMessage 解决这个问题, 但是PostMessage, 发完消息啥事情也不管了,
        可能到时候有点小问题。