イベント

Q1
ユーザ定義イベントで親オブジェクト内に記述したイベントハンドラを
明示的に呼び出したい

A1
[原因]
同名のイベントハンドラを親子関係にあるFormとDialogの双方で利用している場合、Dialogで発生させたユーザ定義イベントによって、親オブジェクト内のハンドラではなく子オブジェクト内のハンドラが発動してしまう。

[解決方法]
CRSではイベントはイベントハンドラにより捕捉されるまで、Rootを頂点とするオブジェクトツリーを上位に向かって伝播していきます。より下位にある子オブジェクト内のイベントハンドラではなく、親オブジェクト内のハンドラを発動するためには、親オブジェクトに属するということを明示的に記述する必要があります。

下記は、サンプルコード内のDialogBから親にあたるFormAのDialogEventをPostしている部分です。"DialogB.^" が親を示しています。

DialogB.^.postEvent(userevent+1, "DialogEvent");

【参考】
特別なオブジェクト名:
"//"は特別に、階層構造の頂点のオブジェクトを指す名前として利用できます。"^"は特別に、指定オブジェクトの親オブジェクトを指す名前として利用できます。
オンラインマニュアル > オブジェクト操作 > オブジェクト名の検索 をご参照ください。


[サンプルコード]
/*FormA >DialogB >DialogCという関係でFormA, DialogBのそれぞれで
同名のイベントハンドラを利用する例*/

---FormAの記述---
Form FormA {
    X = 0;
    Y = 0;
    Width = 328;
    Height = 184;
    Button Button1 {
        X = 108;
        Y = 94;
        Width = 100;
        Height = 42;
        Title = "Bを呼ぶ"
        Function OnTouch( e ) {
            /* DialogBを呼ぶ */
            get("DialogB.crs");
        }
    }
    Function OnDialogEvent(e){
        /*同名のイベントハンドラがDialogBにもある*/
        MessageBox("FormA Event","FormA Event",$OK);
    }
}

---DialogBの記述---
Dialog DialogB {
    Title = "DialogB";
    Form Form1 {
        Width = 293;
        Height = 222;
        Button Button1 {
            X = 90;
            Y = 125;
            Width = 100;
            Height = 45;
            Title = "Cを呼ぶ";
            Function OnTouch( e ) {
                /* DialogCを呼ぶ  */
                get("DialogC.crs");
            }
        }
        Button Button2 {
            X = 37;
            Y = 38;
            Width = 203;
            Height = 41;
            Title = "Aを呼んで自分を消す";
            Function OnTouch( e ) {
                /* DialogBの親 = FormAのDialogEventをポストする */
                DialogB.^.postEvent(userevent+1, "DialogEvent");
                DialogB.Delete();
            }
        }
    }
    Function OnDialogEvent(e){
        /*同名のイベントハンドラがFormAにもある*/
        MessageBox("DialogB Event","DialogB Event",$OK);
    }
}

---DialogCの記述---
   省略
管理番号: EveM_001
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser Mobile・Biz/Designer Mobile TIPS集 トップへ