当前位置 : 主页 > 编程语言 > delphi >

delphi – 创建一个尚未声明的表单 – 我不知道为什么

来源:互联网 收集:自由互联 发布时间:2021-06-23
我正在使用Delphi 7(我知道它是古董)并且我对我正在创建的表单有点困惑,并在完成它时进行破坏. 从我的主表单中,我创建了另一个请求用户名和密码的表单.新创建的表单属性等包含在另
我正在使用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仍会添加该全局变量.

就个人而言,我根本不喜欢这些全局变量,我总是在创建表单或数据模块时手动删除它们.不幸的是,似乎没有可能配置它.

所以:删除全局并声明局部变量,就像在原始代码中一样.这是正确的方法.全球化是为了让初学者更容易,但它并没有帮助您的应用程序的可维护性.

网友评论