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

解決


 2004-03-03 20:35:05  No: 7510  IP: [192.*.*.*]

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

編集    削除
るるとん@K  2004-03-03 21:33:25  No: 7511  IP: [192.*.*.*]

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

編集    削除
るるとん@K  2004-03-03 21:42:03  No: 7512  IP: [192.*.*.*]

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

編集    削除
LupinⅢ  URL  2004-03-03 21:52:08  No: 7513  IP: [192.*.*.*]

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

編集    削除
たかみちえ  URL  2004-03-03 22:12:13  No: 7514  IP: [192.*.*.*]

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

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

編集    削除
にしの  2004-03-03 23:00:34  No: 7515  IP: [192.*.*.*]

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  IP: [192.*.*.*]

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

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  IP: [192.*.*.*]

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

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

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

編集    削除
 2004-03-04 00:34:25  No: 7518  IP: [192.*.*.*]

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

編集    削除
 2004-03-04 00:45:02  No: 7519  IP: [192.*.*.*]

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

編集    削除
 2004-03-04 00:45:29  No: 7520  IP: [192.*.*.*]

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

編集    削除