ウィンドウをクローズするときに確認のダイアログを出す
日付 | 2018/09/20 |
---|---|
ID | 18-008 |
バージョン | v11以降 |
プラットフォーム | Win, Mac |
ユーザーがウィンドウをクローズしようとしたときに、本当にクローズするかを確認するためにダイアログを出したいと考えることは良くあると思います。よくあるのは、ウィンドウがクローズされるときのイベントを利用しようとする方法です。しかし、そのような方法では上手くいきません。
イベントが発生したときには、既にその動作を開始しています。開始しているイベントを中断することはできません。アプローチの方法を変える必要があります。
こうした動作を実現するためには、どのようなときにウィンドウがクローズされるのかを理解しておくことが必要です。
Open form window あるいは Open window(※注)で開かれたウィンドウは、次のようなときにクローズされます。
- ACCEPTコマンド、あるいは標準アクションのacceptが実行された
- CANCELコマンド、あるいは標準アクションのcancelが実行された
- On Close Boxイベントが発生しないフォームでウィンドウのクローズボックスが押された
- データベース環境設定で指定されている「入力フォーム確定」あるいは「入力フォームキャンセル」のショートカットキーが押された
上記のときに、ウィンドウが閉じられます。
確認ダイアログを出してから確実に閉じられるようにするためには、まずウィンドウが閉じられないフォームを作ることを考えます。具体的には次のようなフォームです。
- ACCEPTコマンド、あるいは標準アクションのacceptが使われていない
- CANCELコマンド、あるいは標準アクションのcancelが使われていない
- フォームプロパティにある「On Close Box」イベントが有効
- データベース環境設定で「入力フォーム確定」あるいは「入力フォームキャンセル」のショートカットキーが未定義
このうち、データベース環境設定で「入力フォーム確定」あるいは「入力フォームキャンセル」のショートカットキーを未定義すると、他のフォームも影響を受けてしまいますので、未定義にすることができないかもしれません。そのような場合には、隠しボタンにデータベース設定で定義したショートカットを割り付けることで回避可能です。隠しボタンの作成方法は、下記URLの記事を参考にしてください。
参考資料:ショートカットをフォームに割り付ける
また、On Close Boxの振る舞いについては、リファレンスの他に参考資料として次の記事をご紹介しておきます。
参考資料:ウィンドウを閉じることができません
もし、キャンセルするときだけダイアログを出すのであれば、さらに条件は少なくなります。
- キャンセルボタンだけに、CANCELコマンドが使われいて、データベース環境設定の「入力フォームキャンセル」のショートカットキーが割り付けられている
- フォームプロパティにある「On Close Box」イベントが有効
上記の2つだけの条件に絞られます。
もうお気づきかもしれませんが、上記の条件に合うフォームが表示されたウィンドウでは、キャンセルボタン以外にウィンドウをキャンセルする方法がありません。つまりキャンセルボタンのオブジェクトメソッドで確認ダイアログを出せば良く、その結果を受けてCANCELコマンドを実行するかを分岐するだけで、当初の目的が果たせます。
もしクローズボックスでキャンセルできるようにするのであれば、On Close Boxイベントで、POST KEYコマンドを使い、キャンセルボタンを押すようにコードを書くだけです。
実際に動くサンプルを作成しましたので、ご参考にしていただければと思います。サンプルは下記リンクからダウンロードできます。
サンプルデータベース:Windows macOS 共通(4D v17)
※注:現時点でOpen windowコマンドの利用は推奨されておりません