Forms 表单关闭时发生简单代码和错误

Forms 表单关闭时发生简单代码和错误,forms,delphi,Forms,Delphi,告诉我,哪里有问题: 第一种形式: procedure TForm2.N6Click(Sender: TObject); var About:TAbout; begin About:=TAbout.Create(Application); try About.ShowModal; finally About.Free; end; end; 第二种形式: procedure TAbout.Button1Click(Sender: TObject); begin About.

告诉我,哪里有问题:

第一种形式:

procedure TForm2.N6Click(Sender: TObject);
var About:TAbout;
begin
 About:=TAbout.Create(Application);
 try
   About.ShowModal;
 finally
   About.Free;
 end;
end;
第二种形式:

procedure TAbout.Button1Click(Sender: TObject);
begin
 About.Close;
end;

在大约。关闭时,我收到错误:eaccess违规。我对表单About不做任何其他操作,About的代码为空,只需单击按钮。

在TForm2.N6Click方法中声明
About
变量时,您不使用全局About全局变量

但是在About表单中,当您尝试调用
About
变量上的
Close
时,您使用全局变量,在本例中,该变量保持未初始化状态


尝试删除本地
About
声明,它应该可以工作。

虽然Doug是对的,但最简单的解决方案是只进行更改

procedure TAbout.Button1Click(Sender: TObject);
begin
  Close;
end;
无论如何,这是程序的“正确”版本。如果单击当前
选项卡
表单(即
Self
)的
按钮1
,您自然希望关闭当前
选项卡
表单(即
Self
)。而
Close
Self.Close
TAbout
类中的缩写

TAbout
是表单的一个类。您可以创建该类的任意数量的实例,即所谓的对象。通常,在项目中有一个全局
About
变量,该对象在应用程序启动时自动创建。要显示这一点,您只需执行以下操作

procedure TForm2.N6Click(Sender: TObject);
begin
  About.ShowModal;
end;
另一种方法是禁用自动创建
About
表单(项目/选项),然后在每次需要时创建一个新实例。那你呢

procedure TForm2.N6Click(Sender: TObject);
var About:TAbout;
begin
  About := TAbout.Create(nil);
  try
    About.ShowModal;
  finally
    About.Free;
  end;
end;
无论如何,你想要

procedure TAbout.Button1Click(Sender: TObject);
begin
  Close; // same thing as Self.Close;
end;

如果我点击右角的X(关闭)-一切正常!!!是的,道格纠正了错误的原因。是的,建议的变通办法是可行的,但实际上并不正确。通过在局部过程中使用全局变量创建并释放一个
TAbout
对象,您正在自食其果。看看我的答案。