Button

Q5
Buttonを押下しても、ButtonのTouchイベントが発生しない

A5
[原因]
マウス操作でのButtonのTouchイベントは、マウスの左ボタンをそのButton上で放した
際に発生します。

直前に発生した別イベントでフォーカスが別オブジェクトに移動してしまったなどの理由で
マウスの左ボタンをButton上で放せなかった場合、表面上はButtonを押下しているように
見えても、ButtonのTouchイベントは発生しないことになります。

【例】
TextBoxとButtonの両方にOnTouchイベントハンドラを定義しておき、TextBoxに値を
入力後にButtonを押した場合、TextBox内のOnTouchイベントハンドラ内で定義した
メッセージボックスにフォーカスが移ってしまうので、Buttonを押下しているように見えても、
実際はTouchイベントは発生しません。

Form Form1 {
    TextBox TextBox1 {
        Function OnTouch( e ) {
            //.MessageBox(
               "テキストボックスでTouchイベントが発生しました");
        }
    }
    Button Button1 {
        Function OnTouch( e ) {
            //.MessageBox("ButtonでTouchイベントが発生しました");
        }
    }
}








[解決方法]
SetTimerメソッドでイベント発生のタイミングをずらし、フォーカス位置を判断するフラグを
持つことで、実際の操作に合ったイベントを発生させます。

Buttonのフォーカス有無を判断するフラグを用意しておき、TextBoxのOnTouchイベント
ハンドラ内でSetTimerメソッドを実行、OnTimerイベントハンドラ内でボタンのフォーカスの
有無によって処理を分けてください。
これにより、TextBoxで値を入力後にボタンを押下した場合は、ボタンのOnTouchイベント
ハンドラ内の処理が実行されます。


【サンプルソース】

Form Form1 {
    TextBox TextBox1 {
        Function OnTouch( e ) {
            SetTimer(0.1);
        }
        Function OnTimer( e ){
            RemoveTimer();
            if(Button1.flg == 0){
                //.MessageBox("テキストボックスに値が入力されました");
            }
        }
    }

    Button Button1 {
        Number flg = 0;

        Function OnGetFocus( e ) {
            flg = 1;
        }
        Function OnLostFocus( e ) {
            flg = 0;
        }
        Function OnTouch( e ) {
            //.MessageBox("ボタンが押下されました");
        }
    }
}

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