私は 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 を使用して、アプリケーション内のさまざまなフォームを切り替えています。ここに含まれる両方のフォームは、フォーム コンテナーにあります。1 つのフォーム TdlgSummary には、次のものが含まれます。
procedure TdlgSummary.SyncVars;
begin
dm.Globals.qhProject := _ProjectName.Text
end;
もう 1 つのフォーム TdlgFinalize には、次のものが含まれます。
dlgSummary.SyncVars;
dlgSummary 内で SyncVars を実行すると、正常に動作します。dlgFinalize から呼び出すと、AV が取得されます。これが問題の核心のようですが、何が問題なのかわかりません。制御を dlgFinalize に切り替えても、dlgSummary に戻ることができるため、dlgSummary は破壊されていません。何か案は?