2

私は 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 は破壊されていません。何か案は?

4

1 に答える 1

4

_ProjectNameはnilのように見えます。この行にブレークポイントを設定して_ProjectNameを調べ、有効な参照が得られるかどうかを確認してください。

于 2009-06-10T15:06:58.167 に答える