2

我在 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 也没有被破坏,因为我可以回到它。有任何想法吗?

4

1 回答 1

4

在我看来 _ProjectName 是nil。尝试在这一行放置一个断点并检查_ProjectName,看看它是否提供了有效的引用。

于 2009-06-10T15:06:58.167 回答