现在有一个叫aFrame的 Tframe对象,aFrame创建出来以后,当这个aFrame对象使用完以后,这个aFrame对象怎么自己销毁自己呢?就好像这个aFrame里面有一个退出按钮,按了这个按钮以后,这个aFrame就销毁!

解决方案 »

  1.   

    FreeAndNil(aFrame);这个在哪里执行?在对象里面执行吗?如果在这个对象外部执行我想是没有问题的,但是在对象里面执行好像不是很妥当吧?
      

  2.   

    我試了一下, 好像沒有好辦法喲.
    看來你只有利用Visible屬性啦.不知道其它高手有沒有辦法?
      

  3.   

    把Self.Free;放到类里面执行,只要保证执行这句后,不在对对象成员作其他访问就行了,
      

  4.   

    看了一下TForm的源代码
    TForm释放过程是这样OnClose->     case CloseAction of   
                                     caNone: ModalResult := 0;
                                     caFree: Release;
                                      end;
    —〉Release—〉PostMessage(Handle, CM_RELEASE, 0, 0);如果要自己释放自己,可以在按钮里发送CM_RELEASE,不过前提是对象必须要有一个Handle
      

  5.   

    sdzeng(大头鸟) ( ) 所说的,好像有些问题,按我所知的原理来说,释放自己是不可能的,你点击了那个对象里面的退出按钮,点击完以后,这个过程会返回给该窗体,但是该窗体已经不存在了,也就是说返回的内存地址已经有问题了!
      

  6.   

    创建的时候指定其Owner,一般都是所在的Form。这样,框架的释放会由Form来负责!
      

  7.   

    又去查了一下代码,
    给TFrame自己发送CM_RELEASE的确不可行,
    这是因为TFrame没有TForm那样的消息处理函数来响应CM_RELEASE消息 这是TCustomForm的消息函数
    procedure CMRelease(var Message: TMessage); message CM_RELEASE;
    procedure TCustomForm.CMRelease;
    begin
       Free; 
    end; 所以要实现楼主的功能,得在TFrame里调用Self.free我测试了一下,是可以的
      

  8.   

    我测试的代码
    type
      TFrame2 = class(TFrame)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
    ..........procedure TFrame2.Button1Click(Sender: TObject);
    begin
       Self.Free;
    end;