我于2009年Delphi和我的应用程序包含一个数据模块,其具有在其上命名为“全局”的定制组件。

在应用程序中的另一种形式中,我试图在全局组件上更改已发布属性(字符串):

  dm.Globals.qhProject := _ProjectName.Text; //always gives access violation

在_ProjectName控制是一个TLabeledEdit后代。我总是得到一个访问冲突在这里,如果有在框中任何文本。

不过,如果我手动assing一个字符串的财产,我没有得到AV:

  dm.Globals.qhProject := 'some text'; //works

这里的qhProject属性的声明:

FqhProject: string;    
property qhProject: string read FqhProject write FqhProject;

我想不通为什么会出现在所有这里是一个AV。我试过把自动创建周围的形式/数据模块的命令,但我总是得到AV。

我在做什么错在这里?

<强>更新

我使用Billenium影响TFormContainer在应用不同的形式间切换。正在这里涉及两种形式的形式为容器。一种形式中,TdlgSummary,包含以下内容:

procedure TdlgSummary.SyncVars;
begin
    dm.Globals.qhProject := _ProjectName.Text
end;

在其它形式的,TdlgFinalize,包含以下内容:

dlgSummary.SyncVars;

如果我跑dlgSummary内SyncVars,它工作正常。如果我把它从dlgFinalize,我得到的AV。这似乎是问题的症结所在,但我想不出什么错误。即使我切换控制dlgFinalize,dlgSummary并没有被破坏,因为我可以回去了。任何想法?

有帮助吗?

解决方案

我看来像_ProjectName是的即可。尝试把一个断点在该行并检查_ProjectName,看它是否提供了有效的参考或没有。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top