2009-06-10 6 views
2

私はDelphi 2009を使用しています。私のアプリケーションには、グローバルコンポーネントという名前のカスタムコンポーネントが含まれています。アプリケーション内の別の形態ではデータモジュールにコンポーネントプロパティを割り当てるときのアクセス違反

、私はグローバルコンポーネントに公開プロパティ(文字列)を変更しようとしています:

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

これらのフォームのいくつかは、Billenium Effectsコンポーネントスイートの一部であるTFormContainerの内部にあります。 _ProjectNameを含むフォームが上記のコードを実行するときに有効な参照を与えます。他のフォームがそれを実行すると、参照は無効です。私はフォーム間で前後に切り替えることができるので、ここからどこに行くのか分からず、_ProjectNameコントロールのフォームは破棄されていません.... – croceldon

+0

詳細:フォームにアクセスできないようです他のフォームから編集された編集(TdlgSummary)。私は理由を理解することはできません。 ソースステートメントがusesステートメントにあり、次のようにアクセスしています。 dlgSummary._ProjectName.Text // AVをスローします – croceldon

+0

私はBillenium Effectsやフォームコンテナに精通していませんが、フォームがDPRではなくフォームコンテナによって作成されているかどうかを確認します。 dlgSummaryはフォームの単位で宣言されたグローバル変数ですが、フォームコンテナが想定されているためDelphiが起動時に初期化していない場合、フォームコンテナはフォームクラスのインスタンスをインスタンス化して内部リストに割り当てます指定されたグローバルではなく、グローバルフォーム変数はゼロとして残されます。私はここ暗闇の中で盲目的に発砲しているが、それが起こっているのかどうかを見てみよう。 –

関連する問題