gpt4 book ai didi

forms - 简单的代码和错误发生在表单关闭

转载 作者:行者123 更新时间:2023-12-03 18:01:01 24 4
gpt4 key购买 nike

告诉我,哪里出了问题:

第一种形式:

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;

在 About.Close 上我得到错误:EAccessViolation。我没有对 About 表单做任何其他操作,About 的代码是空的,只需单击按钮即可。

最佳答案

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

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

无论如何这是程序的“正确”版本。如果您单击当前TAbout 表单(即Self)的Button1,您自然希望关闭当前TAbout 形式(即 Self)。在 TAbout 类中,CloseSelf.Close 的简写。

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;

关于forms - 简单的代码和错误发生在表单关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com