在数据模块上分配组件属性时发生访问冲突

时间:2009-06-10 15:02:17

标签: delphi datamodule

我正在使用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也没有被销毁,因为我可以回到它。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

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