zoukankan      html  css  js  c++  java
  • FormDestroy 和 FormClose 有什么区别和联系?

    1.窗口的所有资源真正释放时调用 FormDestroy。当你关闭窗口时,VCL会调用FormClose,如果你在FormClose里写Action = caFree,那么VCL会继续调用FormDestroy;如果你将Action的值赋为其它任何值,VCL不会真正释放窗口
    资源(如果Action=caNone则什么事都不做,窗口保持原状),这时就不会调用 FormDestroy 。


    2.我的程序是这样的:
    将Form2改为available,然后在TForm2.FormClose 写 action := caFree; 在TForm2.FormDestroy 写 Form2 := nil;
    然后这样使用Form2
      if not Assigned(Form2) then
        Form2 := TForm2.Create(Self);
        Form2.Show;//  Form2.ShowModal ; 

    第一种情况:   
      在FormClose中调用Form1.Close,则会调用到TForm.OnClose,其中又调用到了FormClose,所以就死递归了。一死递归,当然就栈溢出(Stack   Overflow)。   
        
      第二种情况:   
      在FormClose调用Form1.Free,这样会调用TForm.Destroy,TForm.Destroy会判断自己是否与Application.MainForm相同,如果是,则会将Application.MainForm置为nil,TForm.Destroy然后触发FormDestroy,在FormDestroy中Form1被置成了nil。FormClose是由TForm.Close调用的,本来在FormClose之后,比较它自己是否Application.MainForm,如果是,就调用Application.Terminate结束应用程序。但这时虽然Self还是非nil,它只是Close方法中的一个隐藏变量,而Application.MainForm已经为nil,所以即使MainForm已经不存在了,但应用程序还是存在,只是看不见它了。Application本身也是一个窗口,但它的大小为0。所以只能用别的办法来关闭应用程序了(Ctrl+Alt+Del或在Delphi   IDE中按Ctrl+F2)。   
        
      忠告:   
      尽量不要用Free方法来关闭窗体,尤其是主窗体,应该用Close方法。在FormCreate,   FormShow,   FormActivate,   FormCloseQuery,   FormClose,   FormDestroy各事件中不要调用关闭、释放或销毁窗体的方法。   
      不要在方法或事件中直接引用Form1这类全局实例变量,如果别人用下列方法创建窗体,用Form1变量就没有作用了:   
        
      var   
          myFormVar:   TForm1;   
        
      begin   
          myFormVar   :=   TForm1.Create(Application);   
          myFormVar.Show;   
          //   用myFormVar用一些事   
          myFormVar.Close;   
      end;   
        
      因为这时候TForm1.FormClose中运行的其实是myFormVar而不是Form1。   
      在FormDestroy中可以改成这样:   
      if   Self=Form1   then   
          Form1   :=   nil;   
      用这个方法来防止别的程序对Form1的无意错误引用。   
     
    分类: Delphi
  • 相关阅读:
    远程桌面无法复制粘贴
    正则表达式(http://tieba.baidu.com/p/882391125)
    android 2048游戏、kotlin应用、跑马灯、动画源码
    Android扫码二维码、美女瀑布流、知乎网易音乐、动画源码等
    android狼人杀源码,桌面源码,猎豹快切源码
    android文件管理器源码、斗鱼直播源码、企业级erp源码等
    android动画源码合集、动态主题框架、社交app源码等
    android下载管理、理财、浏览器、商品筛选、录音源码等
    android手机安全卫士、Kotlin漫画、支付宝动画、沉浸状态栏等源码
    android企业级商城源码、360°全景图VR源码、全民直播源码等
  • 原文地址:https://www.cnblogs.com/jijm123/p/10599142.html
Copyright © 2011-2022 走看看