Frame Tree

“3.3.2章”でフレームの用途と簡単な使用法を説明しました。この章では、フォームの相互関係をもう少し具体的に図式化して説明します。

表記法

フレームの相互関係を図式化する際に使用する表記法を説明します。

ボックス

コレクション上の項目です。ここの’Item’という文字は実際の名前とは関係ありません。

連結線

説明

上の表記は以下のような意味です。

用語の定義

用語

説明

エレメント

コンポーネントのプロパティ、メソッド、イベントを総称してコンポーネントのエレメントと言います。

共通で使用するSyntax

フォーム

関係図

frame_tree_form

frame_tree_form_div

スクリプトの例示画面

frame_tree_script_01

インデックスの順序はdtset1、btn0、btn1、cmb0、div0、div1、bind1でと仮定します。

一般的なフォームでインデックスの順序は、Datasetが最初に来て、残りコンポーネントは、配置された順に決まって、Bindオブジェクトが最後に指定されます。

1つのフォームの中の同レベルでは、idが重複してはなりません。しかし、btn0とdiv0_btn0とdiv2_btnは同レベルではないので、同じidで指定しても差し支えありません。

コンポーネント / invisibleオブジェクト / bindのスクリプトアクセス

this.classname == "frm0"
this.name == "frm0"
// btn0へのアクセス
this.all["btn0"].name == "btn0"
this.all[1].name == "btn0"
this.btn0.name == "btn0"
this.components[0].name == "btn0"
this.components["btn0"].name == "btn0"
// dtset1へのアクセス
this.all["dtset1"].name == "dtset1"
this.all[0].name == "dtset1"
this.dtset1.name == "dtset1"
this.objects[0].name == "dtset1"
this.objects["dtset1"].name == "dtset1"
// コンポーネント / invisibleオブジェクト / bindの個数
this.all.length == 7
this.components.length == 5 //btn0, btn1, comb0, div0, div1
this.binds.length == 1

コンテナコンポーネントへのスクリプトアプローチ

フォームを接続していないcontainerコンポーネントも動的にinvisible object/ bindを持つことができます。

// div0内のdiv0_btn0へのアプローチ
this.div0.div0_btn0.name == "div0_btn0"
this.div0.all[0].name == "div0_btn0"
this.components[3].components[0].name == "div0_btn0"
// div2内のdiv2_btn0へのアプローチ
this.div0.div2.div2_btn0.name == "div2_btn0"
this.all["div0"].all["div2"].all["div2_btn0"].name == "div2_btn0"
this.components["div0"].components["div2"].components["div2_btn0"].name == "div2_btn0"

フォームを乗せたコンテナコンポーネントへのスクリプトアプローチ

// (frm1内のスクリプトである場合) frm1にあるbtn0のアプローチ
this.name == "div1"
this.btn0.name == "btn0"
this.all["btn0"].name == "btn0"
// (frm0内のスクリプトからアプローチする場合) frm1にあるbtn0のアプローチ
this.name == "frm0"
this.div1.btn0.name == "btn0" //"frm1"を含んでいる“div1”でのみアクセスすることができます。

親スクリプトの使用

this.div1.dtset2.parent.parent.classname == "frm0"
this.div1.dtset2.parent.name == "div1" // frm1はdiv1に乗ることによってその特性を失います。
this.div1.dtset2.parent.classname == undefined // frm1はdiv1に乗せながらその特性を失い、classnameが存在しなくなります。
this.div1.dtset2.parent.name == "div1"

コンテナコンポーネントのエレメントの使用

フォームを持ったコンテナコンポーネントは、フォームのようにコンポーネント、invisibleオブジェクト、bind(以下、エレメント)を持つことができます

フォームを持たないコンテナコンポーネントはinvisibleオブジェクトとbindを持つことができず、コンポーネントのみ持つことができます。

コンテナ機能のないコンポーネント、invisibleオブジェクト、bindはエレメントを持つことができません。

コンテナコンポーネントは乗せられたフォームの特性を持つようになります。

アプリケーション

関係図

frame_tree_application

フォーム内のコンポーネント / bind / invisibleオブジドェクトは.getOwnerFrame()ですが、.getOwnerForm()はありません。

スクリプトの例示画面

frame_tree_script_application

applicationからフォームのスクリプトアクセス

// frm0へのアクセス(ChildFrameの場合)
application.mainframe.frame.form.name =="frm0"
application.mframe0.frame.form.name == "frm0"
application.mframe0.chdframe0.form.name == "frm0"
application.all[0].all[0].form.name == "frm0"
application.all["mframe0"].all["chdframe0"].form.name == "frm0"
this.mainframe.frame.form.name == "frm0"

formからapplicationのスクリプトアクセス

// frm0からapplicationにアクセス(ChildFrameの場合)
this.parent.name == "chdframe0"
this.parent.parent.name == "mframe0"
this.getOwnerFrame().getOwnerFrame().name == "mframe0"
this.getOwnerFrame().getOwnerFrame().parent.mainframe.name == "mframe0"