Tips

ウィンドウをクローズするときに確認のダイアログを出す

日付2018/09/20
ID18-008
バージョンv11以降
プラットフォームWin, Mac

ユーザーがウィンドウをクローズしようとしたときに、本当にクローズするかを確認するためにダイアログを出したいと考えることは良くあると思います。よくあるのは、ウィンドウがクローズされるときのイベントを利用しようとする方法です。しかし、そのような方法では上手くいきません。

イベントが発生したときには、既にその動作を開始しています。開始しているイベントを中断することはできません。アプローチの方法を変える必要があります。

こうした動作を実現するためには、どのようなときにウィンドウがクローズされるのかを理解しておくことが必要です。

Open form window あるいは Open window(※注)で開かれたウィンドウは、次のようなときにクローズされます。

上記のときに、ウィンドウが閉じられます。

確認ダイアログを出してから確実に閉じられるようにするためには、まずウィンドウが閉じられないフォームを作ることを考えます。具体的には次のようなフォームです。

このうち、データベース環境設定で「入力フォーム確定」あるいは「入力フォームキャンセル」のショートカットキーを未定義すると、他のフォームも影響を受けてしまいますので、未定義にすることができないかもしれません。そのような場合には、隠しボタンにデータベース設定で定義したショートカットを割り付けることで回避可能です。隠しボタンの作成方法は、下記URLの記事を参考にしてください。

参考資料:ショートカットをフォームに割り付ける

また、On Close Boxの振る舞いについては、リファレンスの他に参考資料として次の記事をご紹介しておきます。

参考資料:ウィンドウを閉じることができません

もし、キャンセルするときだけダイアログを出すのであれば、さらに条件は少なくなります。

上記の2つだけの条件に絞られます。

もうお気づきかもしれませんが、上記の条件に合うフォームが表示されたウィンドウでは、キャンセルボタン以外にウィンドウをキャンセルする方法がありません。つまりキャンセルボタンのオブジェクトメソッドで確認ダイアログを出せば良く、その結果を受けてCANCELコマンドを実行するかを分岐するだけで、当初の目的が果たせます。

もしクローズボックスでキャンセルできるようにするのであれば、On Close Boxイベントで、POST KEYコマンドを使い、キャンセルボタンを押すようにコードを書くだけです。

実際に動くサンプルを作成しましたので、ご参考にしていただければと思います。サンプルは下記リンクからダウンロードできます。

サンプルデータベース:Windows macOS 共通(4D v17)



※注:現時点でOpen windowコマンドの利用は推奨されておりません