我在Delphi 2009上,我的應用程序包含一個數據模塊,其上有一個名爲'Globals'的自定義組件。在數據模塊上分配組件屬性時訪問衝突
在應用程序中的另一種形式,我想在全局組件更改已發佈屬性(字符串):
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也沒有被銷燬,因爲我可以回到它。有任何想法嗎?
這些形式中的一些形式位於TFormContainer中,該屬性是Billenium Effects組件套件的一部分。 當包含_ProjectName的表單運行上述代碼時,它將提供有效的引用。當另一個表單運行時,引用無效。不知道從哪裏開始,因爲我可以在窗體之間來回切換,並且具有_ProjectName控件的窗體尚未被銷燬。 – croceldon 2009-06-10 15:29:43