Biz/Browser 4.0.3
Biz/Browser
Biz/Browser AI 1.0.0
|
|
|
|
||||||||
|
|
|
|
||||||||
|
|
||||||||||
|
|||||||||||
|
|
|
|
||||||||
|
|
||||||||||
|
|||||||||||
|
|
|
|
||||||||
|
|
||||||||||
|
|||||||||||
|
|
|
|
||||||||
|
FlexView |
||||||||||
|
|||||||||||
表形式のデータを表示するためのクラスです。
SpreadクラスやListViewクラスに似ていますが、データの内容に応じたグルーピング表示や、セルの分割結合に似た表示を行うことができます。また、セルにはテキストボックスやボタンなどを直接配置することが可能です。
FlexViewクラスは他の表形式のクラスとは異なり、個々のセルに対応するオブジェクトはありません。CSVDocumentと同じように個々のセルはFlexViewの内部データとして管理され、メソッドを通してアクセスする必要があります。行数が大きい場合でも生成されるオブジェクト数が少なくなるため、SpreadやListViewよりも多くの行数を扱うことができます。
印刷の対象外です。
デフォルトプロパティはRowPositionです。ValueTypeの指定は無効です。
FlexViewオブジェクトは単独では機能しない複合オブジェクトであり、FlexRecordとFlexItemの派生クラスを下位に配置して利用します。
FlexViewの下位には1個のFlexRecordを配置します。複数のFlexRecordや配列化したFlexRecordを配置することはできません。FlexRecordは、表の行の表示形態を定義するオブジェクトで、行そのものを現したオブジェクトではないことに注意してください。
FlexRecordの下位にはFlexItemから派生している、以下のオブジェクトを複数配置することができます。これらのオブジェクトは列の表示形態とセルの初期値を定義するオブジェクトで、セルそのものを表したオブジェクトではありません。
クラス |
セルアクセッサクラス |
説明 |
なし |
下位のFlexItemを複数行に配置して表示します。 |
|
なし |
下位のFlexItemを複数列に配置して表示します。 |
|
行ヘッダ |
||
グループ化行ヘッダ |
||
ツリー表示行ヘッダ |
||
セルをラベルのように表示します |
||
インデントラベル |
||
セルをボタンのように表示します。クリックすることが可能です。 |
||
セルをチェックボックスのように表示します。クリックで選択状態を変更することができます。 |
||
セルをテキストボックスのように表示します。キー入力による編集が可能です。 |
||
セルをプルダウンリストのように表示します。クリックで選択状態を変更することができます。 |
セルアクセッサクラスにクラス名が記述されているクラスは、FlexDataクラスからの派生クラスで、表データの1列に対応するデータをセルに表示します。「なし」とあるクラスは表データとの関連はありません。
FlexRowSetとFlexColumnSetクラスは、セルの配置を定義するクラスで、列方向または行方向に下位のFlexItemを配置します。下位には、FlexItemの派生クラスを配置することができ、複数のFlexRowSetやFlexColumnSetを下位階層に置くことで、任意の分割を行うことができます。
FlexRecord R {
FlexRowSet Row1 {
FlexColumnSet Col1 {
FlexLabel Label1;
FlexLabel Label2;
FlexLabel Label3;
}
FlexColumnSet Col2 {
FlexLabel Label4;
FlexLabel Label5;
FlexLabel Label6;
}
}
}
セルに表示されるデータは、FlexView.InsertRowメソッドなどで行が生成される際に、FlexRecordオブジェクトの下位に置かれているFlexDataクラスからの派生オブジェクトを参照して構成されFlexViewオブジェクトの内部データとして管理されます。
FlexLabel.Valueなどに指定した値は、セルを構成する際に複写されFlexLabel.Valueとは別のインスタンスとして維持されます。従って、個々のセルの値を更新してもその結果がFlexLabelオブジェクトに影響することはありません。
InsertRowにより表示される結果
@ |
B |
C |
A |
||
|
|
|
|
||
|
|
|
|
この例では、FlexRecordの下位に1個のFlexRowSetと4個のFlexLabelが配置されています。FlexRowSetはFlexDataクラスから派生していないため対応するセルが作られることはありません。FlexLabelはFlexDataからの派生クラスなので、4個のFlexLabelに対応した@~Cの4個のセルが生成されます。
これらの生成されたセルには、FlexLabelに設定されているValue値やFgColorなどの一部のプロパティが複写され、個々のセル単位に維持管理されます。また、VerticalAlignやBorderStyleなど、他のプロパティは複写されず、全てのセルから参照され共有されます。
セル単位に管理されないプロパティは、個々のセルごとに設定を変更することはできないことに注意してください。例えば、FlexLebel.BorderStyleで指定するセルの枠の表示スタイルをセル単位で変更することはできません。どのプロパティがセル単位に管理され、どのプロパティが共有されるかは、クラスごとに異なります。詳細は各クラスのドキュメントを参照してください。
セルはオブジェクトではないため、直接個々のセルを操作することはできませんが、FlexCellクラスの派生クラスが、セルへのアクセッサとして定義されています。アクセッサとは、一種のポインタでアクセッサへの操作は、アクセッサがポイントしているセルへ伝えられます。例えばFlexLabelから構成されたセルのアクセッサ、FlexLabelCellのBgColorを変更すると、FlexLabelCellのポイントしているセルの背景色が変更されます。
アクセッサはセルそのものではないため、アクセッサに対する全ての操作がセルに影響することはありません。例えば、アクセッサをDeleteメソッドにより削除することはできますが、セルが削除されることはありません。また、FlexView.DeleteRowメソッドなどでアクセッサがポイントしているセルが失われた場合でも、アクセッサオブジェクトは維持されます。
アクセッサを直接スクリプトから生成することはできず、FlexView.GetRowメソッド、FlexView.InsertRowメソッド、FlexView.DeleteRowメソッドの戻り値や、各種のイベントの付加データとして得られるFlexRowオブジェクトの子オブジェクトとして生成されます。
FlexRowは表の特定の行をポイントしており、セルの元となったFlexDataの派生オブジェクトと同じ名前をもつFlexCell派生オブジェクトを子オブジェクトに持っています。それぞれのFlexCell派生オブジェクトは、FlexRowがポイントしている行の対応するセルをポイントします。
InsertRowにより返されるアクセッサ例
|
|
|
|
||
A |
C |
D |
B |
||
|
|
|
|
var row = FlexView1.InsertRow(1,1);
rowに戻されるFlexRowの構造。Rowは挿入した新しい行を指している。
row.Aを更新すると、Aに対応したセルに反映されます。
row.A.BgColor = $RED;
row.C.Value = "123";
|
|
|
|
||
A |
123 |
D |
B |
||
|
|
|
|
アクセッサは、FlexRowの直接の子として生成されるため、すべて一意の名前をもっている必要があります。それに対して、FlexItemはFlexRowSet、FlexColumnSetの子とすることで階層を持って定義することができますが、そのときに同じ名前のFlexData派生オブジェクトが複数ある場合、2番目以降に定義された同名オブジェクトに対応するアクセッサを名前で利用することはできなくなります。
この例の場合、後続のLabelA、LabelB(黄色部分)を名前で操作することはできなくなります。FlexRowに用意されるGetColumn、GetHeaderColumnメソッドを利用すると、名前ではなく位置でFlexCellを取得することができ、後続のLabelA、LabelBを操作する場合、
var lb_a = row.GetColumn(2); /* 3列目 LabelA */
var lb_b = row.GetColumn(3); /* 4列目 LabelB */
となりますが、表示位置を変更するとプログラムを合わせて修正する必要が発生します。
また、名前付CSVをロードする際にも後続の LabelA、LabelBにはデータが割り当てられることはありません。
同一の列名を使うとこのような制約が多く発生します。できる限り個々の列には一意な名前を付けるようにしてください。
アクセッサは、行を指すFlexRowオブジェクトに従属して生成され、内部的FlexRowオブジェクトと連携して実際にセルにアクセスします。従って、アクセッサオブジェクトはFlexRowオブジェクトが失われた場合、機能する事はできません。アクセッサを利用する間は、常にFlexRowオブジェクトを維持するようにしてください。
FlexRecordの下位に配置するFlexDataの派生クラスは、その定義順に左から右、上から下に表示されます。また、定義した順序で左右の矢印キーでカーソルが移動します。定義順序と異なる順序で表示したり、カーソル移動順序を変更することはできません。
FlexRecordの下位に配置するFlexData派生クラスは、その種類によって配置順序に制約があります。左から順に、FlexTreeHeader、FlexGroupHeader、FlexHeader、その他のFlexData派生クラスの順とする必要があります。
右端にFlexTreeHeaderを表示したり、FlexGroupHeaderの左側にFlexHeaderを表示することはできません。
FlexHeaderおよび派生クラスは、FlexLabelなどFlexHeaderから派生していないクラスとFlexRowSetまたはFlexColumnSetの下位に同居することはできません。ヘッダ系の列は常に1行を占有します。
FlexTreeHeaderクラスは、FlexRowSetの下位に配置することはできません。常に1行を占有します。
Mobile版にはFlexRowSet、FlexColumnSet、FlexGroupHeader、FlexTreeHeader、およびそれに対応するFlexCellは実装されていません。
より上記クラスが利用可能になりました
◆ FlexItem.TitleBgColorはテーマ表示を優先するため無効になります
◆ FlexButton.BgColorはテーマ表示を優先するため無効になります
◆ 拡大時の内部有効領域の誤差をなくすためFlexViewを拡大した場合、論理的な計算値より僅かに小さいサイズに調整されます
◆ FlexCheckButtonのチェックボックスはスケーリングの対象外です
◆ FlexListBoxのドロップダウンボタンの幅はスケーリングの対象外です
◆ FlexIndentLabelの折り畳みボタンはスケーリングの対象外です