モード付フォームを閉じるには

解決


  2004-03-03 20:35:05  No: 7510

お世話になっております。
アプリケーションの実行途中でマスタ参照ボタンが押下されたときに、
参照用フォームをクリエイトし、モード付でショウしています。
作成されたフォームのOnShowイベントでエラーが発生した場合、
ModalResult := mrAbort;としフォームを閉じようと考えたのですが、
フォームが閉じません。
ボタンクリックイベントに記述すると、問題なくフォームは閉じます。
参照用フォームのクエリーにパラメータを親フォームから渡しているので、
OnShowイベントでオープンしようと考えたのですが、
解決策があればお教え下さい。
以上よろしくお願いします。


るるとん@K  2004-03-03 21:33:25  No: 7511

mdalresult:=の辺りが実行されて無いのでしょう
エラーとは何のエラー?


るるとん@K  2004-03-03 21:42:03  No: 7512

エラーの対処を親側でしてしまえば良いのでは?
with フォーム.create do
begin
showmodal;
処理
エラー時にはmodalresult:=abort;
処理
free;
end;


LupinⅢ  URL  2004-03-03 21:52:08  No: 7513

確かOnShowの中でmodalResult:=abortとしてもフォームは閉じなかったと思います。
ちなみにCloseでも閉じないと思います。


たかみちえ  URL  2004-03-03 22:12:13  No: 7514

WM_CLOSEをPostMessageすれば閉じたりして…(^^ゞ
ただし一瞬フォームが見えますから、ShowModalするより前に、フォームを表示すべきかそうでないか判断した方がいいでしょう。
ちなみに、メインフォームならApplication.ShowMainFormプロパティで完全に非表示にすることができます。

  なんかどこかにいい例があったような気がしますけどね(..;)


にしの  2004-03-03 23:00:34  No: 7515

function ShowModal: Integer; override;
を定義して、

function TForm2.ShowModal: Integer;
begin
  if エラーである then
  begin
    Result := mrAbort;
    Exit;
  end;
  Result := inherited ShowModal;
end;

とするとか。


  2004-03-04 00:24:54  No: 7516

すこし最初の質問がまずかったようなので書き直します。
親フォームのコードは以下のとおりです。

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としても子フォームが閉じません。

以上よろしくお願いします。


にしの  2004-03-04 00:30:25  No: 7517

OnShowイベントに書かれた処理を、ShowModal関数に書いて、エラーだったらmrAbortを返し、エラーでなければ元のShowModalを呼べばよいのでは?

前に示したコードは、そういう意味で書いたのですが。

それとも、どうしてもOnShowイベントを使用しなければ行けない理由があるのでしょうか。
そうであれば、この方法は使えませんね。


  2004-03-04 00:34:25  No: 7518

すいません...理解できました。
早速試してみます。
ありがとうございました。


  2004-03-04 00:45:02  No: 7519

早速試してみたところ、
とてもうまくいきました。
みなさん大変ありがとうございました。
また、にしのさんにはいつも参考になる情報ありがとうございます。


  2004-03-04 00:45:29  No: 7520

解決しました。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加