2009-06-10 52 views
2

我在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也沒有被銷燬,因爲我可以回到它。有任何想法嗎?

回答

4

在我看來_ProjectName是。嘗試在這一行放置一個斷點並檢查_ProjectName,看它是否給出了有效的引用。

+0

這些形式中的一些形式位於TFormContainer中,該屬性是Billenium Effects組件套件的一部分。 當包含_ProjectName的表單運行上述代碼時,它將提供有效的引用。當另一個表單運行時,引用無效。不知道從哪裏開始,因爲我可以在窗體之間來回切換,並且具有_ProjectName控件的窗體尚未被銷燬。 – croceldon 2009-06-10 15:29:43