好吧,我的问题如下:
我有一个 Delphi 5 应用程序,我基本上要移植到 Delphi 2010(用最新版本替换旧组件,修复不可避免的 Ansi/Unicode 字符串问题等),但我遇到了麻烦。
在创建我们的一种表单时,会发生访问冲突。看完之后,我得出的结论是,这是因为 Create 中调用的 setter 之一试图更改表单上尚未创建的对象的属性。
我把它剪掉了一点,但代码基本上是这样的:
在表单声明中:
property EnGrpSndOption:boolean read fEnGrpSndOption write SetGrpSndOption;
在表单的创建中:
EnGrpSndOption := false;
在实施中:
procedure Myform.SetGrpSndOption(const Value: boolean);
begin
fEnGrpSndOption := Value;
btGrpSnd.Visible := Value;
end;
通过在 btGrpSnd.Visible := Value 之前加入 ShowMessage(BooltoStr(Assigned(btGrpSend), true)),我确认问题在于尚未创建 btGrpSnd。
btGrpSend 是一个 LMDButton,但我很确定这不是很相关,因为它甚至还没有被创建。
虽然我意识到我可能只应该在确认分配了控件后才分配一个值,但这只会导致 create 中设置的值未设置为实际控件。
所以我想做的是找到一种方法来确保表单上的所有控件都是在我的 Create 运行之前创建的。
对此的任何帮助或有关 Delphi 如何创建表单的信息将不胜感激。它可以在 Delphi 5 中使用,所以我想应该在版本之间的更改列表中的某个地方提到它的原因。毕竟,Delphi 2010 比 Delphi 5 更新不少。