お世話になっております。
アプリケーションの実行途中でマスタ参照ボタンが押下されたときに、
参照用フォームをクリエイトし、モード付でショウしています。
作成されたフォームのOnShowイベントでエラーが発生した場合、
ModalResult := mrAbort;としフォームを閉じようと考えたのですが、
フォームが閉じません。
ボタンクリックイベントに記述すると、問題なくフォームは閉じます。
参照用フォームのクエリーにパラメータを親フォームから渡しているので、
OnShowイベントでオープンしようと考えたのですが、
解決策があればお教え下さい。
以上よろしくお願いします。
mdalresult:=の辺りが実行されて無いのでしょう
エラーとは何のエラー?
エラーの対処を親側でしてしまえば良いのでは?
with フォーム.create do
begin
showmodal;
処理
エラー時にはmodalresult:=abort;
処理
free;
end;
確かOnShowの中でmodalResult:=abortとしてもフォームは閉じなかったと思います。
ちなみにCloseでも閉じないと思います。
WM_CLOSEをPostMessageすれば閉じたりして…(^^ゞ
ただし一瞬フォームが見えますから、ShowModalするより前に、フォームを表示すべきかそうでないか判断した方がいいでしょう。
ちなみに、メインフォームならApplication.ShowMainFormプロパティで完全に非表示にすることができます。
なんかどこかにいい例があったような気がしますけどね(..;)
function ShowModal: Integer; override;
を定義して、
function TForm2.ShowModal: Integer;
begin
if エラーである then
begin
Result := mrAbort;
Exit;
end;
Result := inherited ShowModal;
end;
とするとか。
すこし最初の質問がまずかったようなので書き直します。
親フォームのコードは以下のとおりです。
TEST_F := TEST_F.Create(self);
try
TEST_F.CODE := 1;
case TEST_F.ShowModal of
mrOK:
begin
end;
mrRetry:
begin
end;
mrAbort:
begin
Application.Terminate;
Exit;
end;
mrCancel:
begin
end;
end;
finally
TEST_F.Free;
end;
子フォームでは受け取ったコードをもとにOnSHowイベントでクエリーを開いています。
クエリーのオープン時にはまずエラーが発生することはないのですが、
なんらかの原因でエラーが発生した場合を考えて、
mrAbortを返して親側でプログラム自体を終了しようと考えています。
ところが、先に書いたとおり、OnShowイベントでModalResult := mrAbortとしても子フォームが閉じません。
以上よろしくお願いします。
OnShowイベントに書かれた処理を、ShowModal関数に書いて、エラーだったらmrAbortを返し、エラーでなければ元のShowModalを呼べばよいのでは?
前に示したコードは、そういう意味で書いたのですが。
それとも、どうしてもOnShowイベントを使用しなければ行けない理由があるのでしょうか。
そうであれば、この方法は使えませんね。
すいません...理解できました。
早速試してみます。
ありがとうございました。
早速試してみたところ、
とてもうまくいきました。
みなさん大変ありがとうございました。
また、にしのさんにはいつも参考になる情報ありがとうございます。
解決しました。
ありがとうございました。
ツイート | ![]() |