当我打开一个模式窗体(Form2)时遇到运行时错误,该窗体在创建时调用另一个使用VCL组件执行某些操作的过程。以下程序演示了该问题。
下面是模态表单上的代码:
procedure DoLabel;
begin
form2.Label1.Caption := 'A';
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
DoLabel;
end;
这编译得很好。但是,程序在打开模态窗体时崩溃。调试器说:* 地址xxxx处的访问冲突 *。这可能是一个基本错误,但我做错了什么?以及如何解决这个问题?
1条答案
按热度按时间wswtfjt71#
您使用的是全局变量
Form2
,该变量在TForm2
对象仍在构造时尚未赋值(或根本没有赋值)。您需要更改代码,使其在构造过程中不依赖于该变量(最好将其完全删除,除非
TForm2
是在启动时自动创建的,这听起来并不像是自动创建的)。例如,将表单的
Self
指标,或什至是TLabel
指标,当做DoLabel()
的输入参数传递,例如:不过,在这种情况下,让
DoFormStuff()
(也可能是DoLabel()
)成为TForm2
类的成员而不是自由函数会更有意义: