我正在使用Delphi 7(我知道它是古董)并且我对我正在创建的表单有点困惑,并在完成它时进行破坏. 从我的主表单中,我创建了另一个请求用户名和密码的表单.新创建的表单属性等包含在另
从我的主表单中,我创建了另一个请求用户名和密码的表单.新创建的表单属性等包含在另一个单元中,并包含在Uses子句中.
在我的主要形式,我以前“有”以下代码;
var MyOtherForm: TMyotherform; Begin MyOtherForm := TMyotherform.create(Nil); { Then I do stuff - blah blah } MyOtherForm.free; End;
我的问题是,当我在我的主单元中删除MyOtherForm的声明时,它仍然可以正常工作.例如;
{ var // removed MyOtherForm: TMyotherform; // removed } Begin MyOtherForm := TMyotherform.create(Nil); { Then I do stuff } MyOtherForm.free; End;
同样的结果,表格照常创建并销毁.我无法理解的是为什么.过去我是否通过在主单元中声明我的表单,或者在一个单独的单元中声明它是否足够,我做错了吗?
默认情况下,Delphi为表单创建一个全局变量.它添加在表单的类声明下面.该变量的名称是类名减去’T’,因此它与您的局部变量使用的名称相同,这就是代码仍然有效的原因:您只是在该全局变量中存储了一个新引用.
如果您有自动创建表单,Delphi将在启动应用程序时创建表单实例,并将引用存储在该全局中.您可以在项目选项中管理自动创建的表单和数据模块,或者您只需编辑dpr文件,在该文件中您将找到如下行:
Application.CreateForm(TMyotherform, Myotherform);
但即使您的表单不是自动创建的,Delphi仍会添加该全局变量.
就个人而言,我根本不喜欢这些全局变量,我总是在创建表单或数据模块时手动删除它们.不幸的是,似乎没有可能配置它.
所以:删除全局并声明局部变量,就像在原始代码中一样.这是正确的方法.全球化是为了让初学者更容易,但它并没有帮助您的应用程序的可维护性.