告诉我,问题出在哪里:
第一种形式:
procedure TForm2.N6Click(Sender: TObject);
var About:TAbout;
begin
About:=TAbout.Create(Application);
try
About.ShowModal;
finally
About.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
第二种形式:
procedure TAbout.Button1Click(Sender: TObject);
begin
About.Close;
end;
Run Code Online (Sandbox Code Playgroud)
关于About.Close我得到错误:EAccessViolation.我没有对表单关于做任何其他事情,关于的代码是空的,只需点击按钮.
And*_*and 11
虽然Doug是对的,但最简单的解决方案是只做出改变
procedure TAbout.Button1Click(Sender: TObject);
begin
Close;
end;
Run Code Online (Sandbox Code Playgroud)
无论如何,这是该程序的"正确"版本.如果单击Button1当前TAbout表单(即Self),您自然希望关闭当前TAbout表单(即Self).并且在课堂上Close是短手Self.Close的TAbout.
TAbout是一个表格的类.您可以创建此类的任意数量的实例,即所谓的对象.通常,About项目中有一个全局变量,并且在应用程序启动时会自动创建此对象.为了表明这一点,你只需要这样做
procedure TForm2.N6Click(Sender: TObject);
begin
About.ShowModal;
end;
Run Code Online (Sandbox Code Playgroud)
另一种方法是禁用About表单的自动创建(项目/选项),然后在每次需要时创建一个新实例.然后你做
procedure TForm2.N6Click(Sender: TObject);
var About:TAbout;
begin
About := TAbout.Create(nil);
try
About.ShowModal;
finally
About.Free;
end;
end;
Run Code Online (Sandbox Code Playgroud)
在任何情况下,你想
procedure TAbout.Button1Click(Sender: TObject);
begin
Close; // same thing as Self.Close;
end;
Run Code Online (Sandbox Code Playgroud)
About在TForm2.N6Click方法中声明变量时,不使用全局关于全局变量.
但在关于形式,当你尝试调用Close对About变量使用全局变量,在这种情况下仍然未初始化.
尝试删除本地About声明,它应该工作.
| 归档时间: |
|
| 查看次数: |
1044 次 |
| 最近记录: |