我在 Delphi 2009 上,我的应用程序包含一个数据模块,它上面有一个名为“Globals”的自定义组件。
在应用程序的另一种形式中,我正在尝试更改 Globals 组件上的已发布属性(字符串):
dm.Globals.qhProject := _ProjectName.Text; //always gives access violation
_ProjectName 控件是一个 TLabeledEdit 后代。如果框中有任何文本,我总是在这里遇到访问冲突。
但是,如果我手动为属性分配一个字符串,我不会得到 AV:
dm.Globals.qhProject := 'some text'; //works
这是 qhProject 属性的声明:
FqhProject: string;
property qhProject: string read FqhProject write FqhProject;
我不明白为什么这里有一个 AV。我试过移动表单/数据模块的自动创建顺序,但我总是得到 AV。
我在这里做错了什么?
更新:
我正在使用 Billenium Effects TFormContainer 在应用程序中的不同表单之间切换。此处涉及的两种表单都在表单容器中。一种形式 TdlgSummary 包含以下内容:
procedure TdlgSummary.SyncVars;
begin
dm.Globals.qhProject := _ProjectName.Text
end;
另一种形式 TdlgFinalize 包含以下内容:
dlgSummary.SyncVars;
如果我在 dlgSummary 中运行 SyncVars,它可以正常工作。如果我从 dlgFinalize 调用它,我会得到 AV。这似乎是问题的症结所在,但我无法弄清楚出了什么问题。即使我将控制权切换到 dlgFinalize,dlgSummary 也没有被破坏,因为我可以回到它。有任何想法吗?