フォーカス

Q
キーイベント発生の優先度を変更したい

A
通常、1回のキー操作で起こる動作は、フォーカス移動、オブジェクト固有の動作、
AltKey指定の動作、KeyDownイベントのうち、いずれか1つです。

例えば、ボタンのAltKeyプロパティに$TAB(TABキー)を設定した場合、
Touchイベントを発生させる代替キーはTABキーです。
ボタンにフォーカスが当たった状態でTABキーを押下すると、フォーカスの移動は
発生しますが、Touchイベントは発生しません。AltKeyプロパティに割り当てられている
キーの操作より、フォーカス移動の処理が優先されるためです。

Biz/BrowserのRootクラスには、AltKeyPriorityプロパティが存在します。
AltKeyPriorityプロパティに定数を設定することにより、フォーカス移動(Tabキー、
Shift+Tabキー、NextTabKeyプロパティ、PrevTabKeyプロパティ)、AltKeyプロパティ、
オブジェクト固有の動作、KeyDownイベントの優先度を変更することができます。

AltKeyPriorityプロパティに設定できる定数の値、イベントの優先度については
以下のとおりです。
定数 優先度
0 NextTabKey→オブジェクト動作→AltKey→KeyDown
1 AltKey→NextTabKey→オブジェクト動作→KeyDown
2 NextTabKey→AltKey→オブジェクト動作→KeyDown
16 NextTabKey+KeyDown→オブジェクト動作→AltKey→KeyDown
17 AltKey+KeyDown→NextTabKey+KeyDown→オブジェクト動作→KeyDown
18 NextTabKey+KeyDown→AltKey+KeyDown→オブジェクト動作→KeyDown

定数「0」〜「2」を設定した場合、NextTabKeyプロパティやAltKeyプロパティに操作を
割り当てていると、キーに割り当てた操作が優先されるため、KeyDownイベントは
発生しません。

ですが、定数「16」〜「18」を設定した場合、オブジェクト動作前でNextTabKeyプロパティや
AltKeyプロパティに割り当てた操作を行うと、同時にKeyDownイベントも発生します。

ただし、フォーカスの当たっているオブジェクトの種類によっては、オブジェクトの動作が
優先されることがあります。

[サンプルコード] ※記述ポイント抜粋
Form Fcs_008{
    /* Enterキーで移動 */
    NextTabKey = $Enter;
    ・・・(略)・・・
    OptionButton OptionButton1 {
        ・・・(略)・・・
        OptionItem item[6] {
            ・・・(略)・・・
            Function OnTouch( e ) {
                  /* 選択値を変数に格納する */
                  var ptn = e.From.Index;

                  Switch(ptn){
                         /* パターン1選択時 */
                         case 0:
                               //.AltKeyPriority = 0;
                               ^.^.EditBox1.Value = ^.^.txt1;
                               break;
                         /* パターン2選択時 */
                         case 1:
                               //.AltKeyPriority = 1;
                               ^.^.EditBox1.Value = ^.^.txt2;
                               break;
                         /* パターン3選択時 */
                         case 2:
                               //.AltKeyPriority = 2;
                               ^.^.EditBox1.Value = ^.^.txt3;
                               break;
                         /* パターン4選択時 */
                         case 3:
                               //.AltKeyPriority = 16;
                               ^.^.EditBox1.Value = ^.^.txt4;
                               break;
                         /* パターン5選択時 */
                         case 4:
                               //.AltKeyPriority = 17;
                               ^.^.EditBox1.Value = ^.^.txt5;
                               break;
                         /* パターン6選択時 */
                         case 5:
                               //.AltKeyPriority = 18;
                               ^.^.EditBox1.Value = ^.^.txt6;
                               break;
                  }
                  /* ラベル初期化 */
                  ^.^.Label1.Value = "";
            }
        }
        ・・・(略)・・・
    }
    Button Button1 {
        ・・・(略)・・・
        /* Touchイベントの代替キー */
        AltKey = $F04;
        
        Function OnTouch( e ) {
            /* F4キー押下後、メッセージボックスを表示 */
            //.MessageBox("F4キーのTouchイベントが発生しました。");
            ^.Label1.Value = "";
        }
    }
    Button Button2 {
        ・・・(略)・・・
        /* Touchイベントの代替キー */
        AltKey = $Tab;
        
        Function OnTouch( e ) {
            /* Tabキー押下後、メッセージボックスを表示 */
            //.MessageBox("TabキーのTouchイベントが発生しました。");
            ^.Label1.Value = "";
        }
    }
    Function OnKeyDown( e ){
        /* 押下したキーを判別し、ラベルに表示するメッセージを決定する */
        if(e.key == "RETURN"){
            this.Label1.Value = "EnterキーのKeyDownイベントが
                                                    発生しました。";
        }else if(e.key == "F4"){
            this.Label1.Value = "F4キーのKeyDownイベントが
                                                    発生しました。";
        }else if(e.key == "TAB"){
            this.Label1.Value = "TabキーのKeyDownイベントが
                                                    発生しました。";
        }
    }
} 
 上記のサンプルでは、代替キーとしてAltKeyプロパティにF04キー・Tabキーを
 割り当てています。オプションボタンの選択値によって、AltKeyPriorityプロパティに
 設定する定数が決定します。
 設定値により、Touchイベントの優先順位、KeyDownイベントの発生有無が異なります。

実際の挙動については、CRSファイル形式のサンプル
   「キーイベント発生の優先度を変更したい(Fcs_008.zip)」
をご確認ください。

 
管理番号:Fcs_008
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser・Biz/Designer TIPS集 トップへ