ルートイベント

LANSA

ルートイベント


複雑な再利用可能パーツや、特に新しいユーザー定義コントロールのデザイン画面のコーディングを簡潔化する為に、コントロール上で検出されたイベントは親チェーンに渡されるようになりました。

ユーザー定義コントロールではよく、表示されるパネルはラベルや画像などから構成されています。しかし、既存のイベント処理では、各ラベルがクリックイベントをもち、受け渡しはしませんでした。それにより、ユーザーは、全ての子コントロールについて、全てのクリックイベントを記述する必要がありました。イベントを親チェーンに受け渡すことで、コーディングはとても簡潔化されます。

もちろん、どのコントロールがイベントを最初に起動するかを知っておく必要があります。EVTROUTINE コマンドは既に Com_Sender セレクタを持っていますが、これは、イベントを起動したコントロールについてしか報告しません。そのため、Origin セレクタが追加されました。どれだけたくさんの親レイヤーが使用されていたとしても、Origin はイベントが実際に開始されたインスタンスへの参照を持ちます。

Evtroutine Handling(#Com_owner.Click) Origin(#Origin)

Endroutine

 

このルールの唯一の例外は、イベントが再利用可能パーツの外に出た場合です。再利用可能パーツはそれ自体はブラックボックスで、カプセル化のルールにより、再利用可能パーツ内で起こることは、再利用可能パーツ内にとどまらなくてはいけません。そのため、この場合には、親についていえば、起源は再利用可能パーツ自体となります。

このドキュメントのリリース時点では、コントロールは再利用可能パーツをまたがっても使用することができます。これは既知の問題です。

明らかなのは、このイベントの振る舞いの変更により、副次的な効果があるということです。子と親コンポーネントの両方にクリックイベントがある簡単な例では、Win32 では2つのイベントは別々のもののままになります。しかし、DirectX の処理とイベントルートでは、子をクリックすると、子と親の両方のクリックが起動されることになります。これは通常の状況ではなく、お客様が直面する可能性は低いですが、そうはいっても、考えられる状況であり、対応する必要があります。

望まないイベントの広がりに対抗する為、EVTROUTINE に Handled Selector が追加されました。Handled に true と設定することで、イベントは処理されているルーチンを超えては受け渡されなくなります。

Evtroutine Handling(#Button.Click) Handled(#Handled)

* Stop the event going any further up the parent chain.

#Handled := True

Endroutine