Dialog

Q
Dialogを閉じる操作の方法によって処理を制御する
[内容]
呼び出し元の画面に触れた際にDialogが閉じないようにしたい

A
[解決方法]
Biz/Browser SmartDeviceには、DialogクラスのCloseイベントオブジェクトに、「Dialogが
どのようにして閉じられようとしているか」を表すCauseCloseプロパティが存在します。
このプロパティを利用して、 呼び出し元の画面に触れた際にDialogが閉じないよう
制御する事が可能です。

[サンプルコード1]
  ・Dialog1.crs
Dialog Dialog1 {
    Title = "Dialog1";
    
    Form Form1 {
        Width = 336;
        Height = 278;
        
        Label Label1 {
            X = 9;
            Y = 55;
            Width = 313;
            Height = 83;
            Value = "ダイアログ画面の「×」ボタン(Android端末の";
            Value += "場合は\r\n戻るボタン)押下時に";
            Value += "ダイアログ画面が閉じます。\r\nメイン画面を";
            Value += "タップしてもダイアログ画面は閉じません。";
            BgColor = $WHITE;
        }
    }
    
    Function OnClose( e ) {
        if (e.CauseClose != Dialog.CLOSE_ON_TOUCH_OUTSIDE) {
            /* ダイアログ外のタップ以外であれば、
               ダイアログ画面を閉じる */
            ^.Dialog1.Delete();
        }
    }
}

   呼び出し元の画面からDialogを表示し、呼び出し元の画面に触れた際にDialogが
   閉じないようにしたい場合、Dialog外のタップ以外(Android OS:Backキー押下、
   iOS:Dialogの閉じるボタン押下)でDialogを閉じるような判定処理をCloseイベントに
   追加します。条件に該当しなければ、DialogクラスのDeleteメソッドは実行されないので、
   呼び出し元の画面に触れてもDialogは閉じなくなります。

CauseCloseプロパティには、「どのように閉じられようとしているか」を示す定数が格納されて
います。定数はAndroid OSで操作している場合と、iOSで動作している場合で違いがあります。

<Android OSの場合>
  Dialog.CLOSE_ON_BACK_KEY     : AndroidのBackキーで閉じようとした場合
  Dialog.CLOSE_ON_TOUCH_OUTSIDE: ダイアログ外をタップして閉じようとした場合

<iOS、Windowsタブレットの場合>
  Dialog.CLOSE_ON_CLOSE_BUTTON : ダイアログの閉じるボタンで閉じようとした場合
  Dialog.CLOSE_ON_TOUCH_OUTSIDE : ダイアログ外をタップして閉じようとした場合

CauseCloseプロパティを利用することで、Dialogを閉じる操作の方法によって
処理を分ける事が可能です。

[サンプルコード2]
  ・Android OSの場合
Function OnClose( e ) {
        if (e.CauseClose == Dialog.CLOSE_ON_BACK_KEY) {
            /* 端末の「戻る」ボタン押下時、
               ダイアログ画面を閉じる */
            ^.Dialog1.Delete();
        }
}

  ・iOS、Windowsタブレットの場合
Function OnClose( e ) {
        if (e.CauseClose == Dialog.CLOSE_ON_CLOSE_BUTTON) {
            /* ダイアログの閉じるボタン押下時、
               ダイアログ画面を閉じる */
            ^.Dialog1.Delete();
        }
}

【注意】
Windowsタブレット向けの場合、ダイアログ画面表示時、フォーム画面は触れませんが
メニューバーに触ることは可能です。メニューバーを表示させたくない場合は、
予めShowMenuメソッドでメニューバーを非表示に設定する必要があります。

実際の挙動については、CRSファイル形式のサンプル
    「Dialogを閉じる操作の方法によって処理を制御する(DlgSd_002.crs)」
をご確認ください。

管理番号:DlgSd_002
 
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser HT・Biz/Browser SmartDevice・Biz/Browser AI TIPS集 トップへ