如何释放其他东西所拥有的表单?

时间:2012-10-02 14:53:32

标签: delphi

我有一个动态创建的表单需要销毁:

  • 稍后(在应用程序关闭时)IF AssignData成功,或
  • 立即遇到AssignData崩溃。

由于表单由应用程序拥有,因此仅在其上调用FreeAndNil是不安全的。但是Close也行不通;它不会关闭窗口。

FrmLoader:= TFrmLoader.Create(Application);  <----- Application is the Owner                            
TRY
  FrmLoader.AssignData(FileData);                                      
EXCEPT                                                              
  FreeAndNil(FrmLoader);  // <------ unsafe                                            
  FrmLoader.Close;        // <------ this is the safe method to close it but won't work
  RAISE;       
END;
FrmLoader.DoStuff;

1 个答案:

答案 0 :(得分:3)

在拥有的表单上调用Free是完全安全的。或者将表单传递给FreeAndNil。这是处理表单的正确方法。

因此,此代码可以满足您的需求。

FrmLoader:= TFrmLoader.Create(Application);
TRY
  FrmLoader.AssignData(FileData);                                      
EXCEPT                                                              
  FreeAndNil(FrmLoader);
  RAISE;       
END;