创建一个尚未声明的表单有效 - 我不知道为什么
Creating a form that has not been declared works - I don't know why
我正在使用 Delphi 7(我知道它是古董)并且我对我根据需要创建并在完成时销毁的表格感到有点困惑。
我从我的主表单创建了另一个请求用户名和密码的表单。新创建的表单属性等包含在另一个单元中,并包含在 Uses 子句中。
在我的主窗体中,我之前 "had" 以下代码;
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 会为表单创建一个全局变量。它添加在表单的 class 声明下方。
该变量的名称是 class 名称减去 'T',因此它与您用于局部变量的名称相同,这就是代码仍然有效的原因:您刚刚存储了一个该全局变量中的新引用。
如果您有一个自动创建的表单,Delphi 将在应用程序启动时创建一个表单实例,并将引用存储在该全局中。您可以在项目选项中管理自动创建的表单和数据模块,或者您可以简单地编辑 dpr 文件,您会在其中找到如下一行:
Application.CreateForm(TMyotherform, Myotherform);
但即使您的表单不是自动创建的,Delphi 仍然 添加该全局变量。
就我个人而言,我一点也不喜欢那些全局变量,而且我总是在创建表单或数据模块时手动删除它们。不幸的是,似乎无法配置它。
因此:删除全局变量并像在原始代码中那样声明局部变量。这是正确的做法。 global 是为了让初学者更容易,但它无助于您的应用程序的可维护性。
我正在使用 Delphi 7(我知道它是古董)并且我对我根据需要创建并在完成时销毁的表格感到有点困惑。
我从我的主表单创建了另一个请求用户名和密码的表单。新创建的表单属性等包含在另一个单元中,并包含在 Uses 子句中。
在我的主窗体中,我之前 "had" 以下代码;
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 会为表单创建一个全局变量。它添加在表单的 class 声明下方。
该变量的名称是 class 名称减去 'T',因此它与您用于局部变量的名称相同,这就是代码仍然有效的原因:您刚刚存储了一个该全局变量中的新引用。
如果您有一个自动创建的表单,Delphi 将在应用程序启动时创建一个表单实例,并将引用存储在该全局中。您可以在项目选项中管理自动创建的表单和数据模块,或者您可以简单地编辑 dpr 文件,您会在其中找到如下一行:
Application.CreateForm(TMyotherform, Myotherform);
但即使您的表单不是自动创建的,Delphi 仍然 添加该全局变量。
就我个人而言,我一点也不喜欢那些全局变量,而且我总是在创建表单或数据模块时手动删除它们。不幸的是,似乎无法配置它。
因此:删除全局变量并像在原始代码中那样声明局部变量。这是正确的做法。 global 是为了让初学者更容易,但它无助于您的应用程序的可维护性。