Delphi 为什么表单的默认操作是caHide?

Delphi 为什么表单的默认操作是caHide?,delphi,Delphi,为什么当用户单击表单的关闭按钮时,默认操作是caHide而不是caFree? 从编程的角度来看,这似乎是违反直觉的。 这种行为背后有一个隐藏的原因 正如Sertac所说,这是因为Delphi IDE希望表单在应用程序开始时创建,并在应用程序运行时保存在那里。也就是说,当您创建一个新表单时,该表单的全局变量将以表单的单位创建。使用Application.CreateForm(…)在项目主块中使用新表单初始化此变量。没有对free的显式调用,这些表单将在应用程序结束时在TApplication.De

为什么当用户单击表单的关闭按钮时,默认操作是caHide而不是caFree?
从编程的角度来看,这似乎是违反直觉的。

这种行为背后有一个隐藏的原因

正如Sertac所说,这是因为Delphi IDE希望表单在应用程序开始时创建,并在应用程序运行时保存在那里。也就是说,当您创建一个新表单时,该表单的全局变量将以表单的单位创建。使用
Application.CreateForm(…)
在项目主块中使用新表单初始化此变量。没有对free的显式调用,这些表单将在应用程序结束时在TApplication.Destroy期间销毁。使用默认的caHide操作,这一切都很好——您在开始时会得到一个有效的表单实例,该实例将一直有效到应用程序结束。如果默认操作是
caFree
,则当窗体第一次关闭时,全局变量的内容将无效(因为无法知道应该将哪个位置设置为
nil
),并且您将得到一个看起来有效但会导致各种问题的指针(如果幸运的话,请选择“随机”)内存覆盖(如果不是)在使用时。

实际上,它并不总是隐藏的。对于MDI子窗体,它可以是caMinimize或caNone。因为默认情况下,添加到项目中的窗体是自动创建的。您必须询问Borland,为什么他们选择
caHide
作为默认值。但我怀疑这是因为当时使用表单最常见的方式是在项目中自动创建所有表单,因此
caHide
可以轻松创建表单一次,并通过简单的隐藏和显示来反复重用表单。当然,我们现在更清楚了,这不再是建议的练习了。这是有道理的。谢谢