コンパイルしたプログラムを実行するとエラーが発生します。フォームを非表示にしたりフォーカスしたりする前にフォームを有効にするなど、エラーを防ぐために考えられるあらゆる予防策を講じました。アプリケーションは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;