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