4

コンパイルしたプログラムを実行するとエラーが発生します。フォームを非表示にしたりフォーカスしたりする前にフォームを有効にするなど、エラーを防ぐために考えられるあらゆる予防策を講じました。アプリケーションはDimmerForm(灰色のフェード オーバーレイ) を表示NewFileFormし、オーバーレイの上に を表示します。はNewFileFormその作業を行い、作成するファイルを決定しtabsheet、 のページ コントロールに新しいファイルを作成しMainForm、新しく作成されたタブ シートを表示します。NewFileFormこれまでのところ、これはすべて機能しています (閉じてエラーが発生する前に中断し、タブ シートが作成されて正常に表示されていることを確認できます)。その後NewFileForm、閉じますが、これは再び正常に機能しています。

エラーは、何かがフォーカスを に戻そうとすると発生しますMainForm。を非表示にしDimmerFormたり、 をクリックしたり、スルー コードMainFormにフォーカスを設定したりすると、すべてエラー メッセージが表示されます。MainFormコードを { try, except, end} に配置しても、エラー メッセージは回避されません。のフォーカスによってトリガーされる可能性のあるコード内の他のすべてのメソッドを検索しましたがMainForm、エラーが発生する前に何も入力されていません (エラーが発生することはありません)。

以前のバージョンのアプリケーションでまったく同じコードを書き、それをすべてゼロから再構築することにしました。以前のバージョンのアプリケーションは、フォーム フォーカスで問題なく動作しました。

を開くコードは次のNewFileFormとおりです。

procedure TMainForm.NewFilesToolButtonClick(Sender: TObject);
begin

  ShowDimmer;
  NewFileForm.ShowModal;
  HideDimmer;

end;

調光フォームを表示するコードは次のとおりです。

procedure ShowDimmer;
begin

  // Enable to prevent errors
  DimmerForm.Enabled := true;

  // Hide dimmer form and show mainform
  DimmerForm.Show;

end;

調光フォームを非表示にするコードは次のとおりです。

procedure HideDimmer;
begin

  // Enable to prevent errors
  DimmerForm.Enabled := true;
  MainForm.Enabled := true;

  // Hide dimmer form and show mainform
  DimmerForm.Hide;
  MainForm.SetFocus;

end;
4

3 に答える 3

6

一般に、まだ作成されていないもの (作成中のフォーム) にフォーカスを呼び出している場合は、onCreate コードの一部を onShow に移動してみてください。詳細がないと、何が起こっているのかわかりにくいですが、試してみてください。

于 2013-06-06T13:22:15.623 に答える
-1

Arioch 'Theによって投稿されたコメントで与えられた解決策

「Use Debug DCUs」を有効にすることもできます [...]

于 2018-09-18T11:55:12.243 に答える