我有一个主窗体,当单击一个按钮时,它使用以下代码创建子窗体。要创建的表单(frmNewMember
)已从自动创建表单列表中删除。
procedure TfrmMain.btnAddMemberClick(Sender: TObject);
var
NewMemberForm: TForm;
begin
NewMemberForm := TfrmNewMember.Create(Application);
try
NewMemberForm.ShowModal;
finally
NewMemberForm.Free;
end;
end;
当我尝试在表单中创建的过程中使用组件时,会出现AV。例如:
procedure DoSomething;
begin
frmNewMember.edtPostcode.Text := 'TEST';
end;
这会引发读取错误为000003BC的AV。这是因为我试图访问不存在的frmNewMember
实例吗?我确信这有一个简单的答案,但我搜遍了整个地方,似乎无法摆脱AV错误。
答案 0 :(得分:0)
这是你的问题:
frmNewMember
这是Delphi IDE(un)为您帮助声明的全局变量。你从来没有分配它,所以它仍然是零。因此违反了访问权限。
您已停止使用自动创建,这是正确的做法。下一步是清除这些无用的全局变量的代码。一旦你完成了,你就不能再犯这个错误了。
您仍然需要将表单引用添加到该函数中。但现在您可以将其作为参数传递。或者使函数成为表单的一种方法。这也使你的代码更好,所以你继续获胜。
我认为这个问题是 VB的诅咒。添加了全局表单变量以允许Delphi模仿VB的行为。我们早就意识到VB在这方面很糟糕。但是我们仍然留下了这些可怕的全局。
旁白: