FlexViewクラス

Biz/Browser 4.0.3

Biz/Browser Mobile 3.0.0

Biz/Browser AI 1.0.0

Object

 

 

 

 

 

 

 

 

 

NetObject

 

 

 

 

 

 

 

DisplayObject

 

 

 

 

 

 

 

FocusObject

 

 

 

 

 

 

 

FlexView

 

 

 

表形式のデータを表示するためのクラスです。

 

SpreadクラスやListViewクラスに似ていますが、データの内容に応じたグルーピング表示や、セルの分割結合に似た表示を行うことができます。また、セルにはテキストボックスやボタンなどを直接配置することが可能です。

 

FlexViewクラスは他の表形式のクラスとは異なり、個々のセルに対応するオブジェクトはありません。CSVDocumentと同じように個々のセルはFlexViewの内部データとして管理され、メソッドを通してアクセスする必要があります。行数が大きい場合でも生成されるオブジェクト数が少なくなるため、SpreadListViewよりも多くの行数を扱うことができます。

 

画面表示例

 

 

Docクラスによるプリンタ出力

 

印刷の対象外です。

 

デフォルトプロパティとValueType

 

デフォルトプロパティはRowPositionです。ValueTypeの指定は無効です。

 

FlexViewの概要

 

FlexViewオブジェクトは単独では機能しない複合オブジェクトであり、FlexRecordFlexItemの派生クラスを下位に配置して利用します。

 

 

FlexViewの下位には1個のFlexRecordを配置します。複数のFlexRecordや配列化したFlexRecordを配置することはできません。FlexRecordは、表の行の表示形態を定義するオブジェクトで、行そのものを現したオブジェクトではないことに注意してください。

 

FlexRecordの下位にはFlexItemから派生している、以下のオブジェクトを複数配置することができます。これらのオブジェクトは列の表示形態とセルの初期値を定義するオブジェクトで、セルそのものを表したオブジェクトではありません。

 

クラス

セルアクセッサクラス

説明

FlexRowSet

なし

下位のFlexItemを複数行に配置して表示します。

FlexColumnSet

なし

下位のFlexItemを複数列に配置して表示します。

FlexHeader

FlexHeaderCell

行ヘッダ

FlexGroupHeader

FlexGroupHeaderCell

グループ化行ヘッダ

FlexTreeHeader

FlexTreeHeaderCell

ツリー表示行ヘッダ

FlexLabel

FlexLabelCell

セルをラベルのように表示します

FlexIndentLabel

FlexIndentLabelCell

インデントラベル

FlexButton

FlexButtonCell

セルをボタンのように表示します。クリックすることが可能です。

FlexCheckButton

FlexCheckButtonCell

セルをチェックボックスのように表示します。クリックで選択状態を変更することができます。

FlexTextBox

FlexTextBoxCell

セルをテキストボックスのように表示します。キー入力による編集が可能です。

FlexListBox

FlexListBoxCell

セルをプルダウンリストのように表示します。クリックで選択状態を変更することができます。

 

セルアクセッサクラスにクラス名が記述されているクラスは、FlexDataクラスからの派生クラスで、表データの1列に対応するデータをセルに表示します。「なし」とあるクラスは表データとの関連はありません。

 

FlexRowSetFlexColumnSetクラスは、セルの配置を定義するクラスで、列方向または行方向に下位のFlexItemを配置します。下位には、FlexItemの派生クラスを配置することができ、複数のFlexRowSetFlexColumnSetを下位階層に置くことで、任意の分割を行うことができます。

 

FlexRecord R {
    FlexRowSet Row1 {
        FlexColumnSet Col1 {
            FlexLabel Label1;
            FlexLabel Label2;
            FlexLabel Label3;
        }
        FlexColumnSet Col2 {
            FlexLabel Label4;
            FlexLabel Label5;
            FlexLabel Label6;
        }
    }
}

 

 

FlexDataとセルの関係

 

セルに表示されるデータは、FlexView.InsertRowメソッドなどで行が生成される際に、FlexRecordオブジェクトの下位に置かれているFlexDataクラスからの派生オブジェクトを参照して構成されFlexViewオブジェクトの内部データとして管理されます。

 

FlexLabel.Valueなどに指定した値は、セルを構成する際に複写されFlexLabel.Valueとは別のインスタンスとして維持されます。従って、個々のセルの値を更新してもその結果がFlexLabelオブジェクトに影響することはありません。

 

 

InsertRowにより表示される結果

@

B

C

A

 

 

 

 

 

 

 

 

 

この例では、FlexRecordの下位に1個のFlexRowSet4個のFlexLabelが配置されています。FlexRowSetFlexDataクラスから派生していないため対応するセルが作られることはありません。FlexLabelFlexDataからの派生クラスなので、4個のFlexLabelに対応した@~Cの4個のセルが生成されます。

 

これらの生成されたセルには、FlexLabelに設定されているValue値やFgColorなどの一部のプロパティが複写され、個々のセル単位に維持管理されます。また、VerticalAlignBorderStyleなど、他のプロパティは複写されず、全てのセルから参照され共有されます。

 

セル単位に管理されないプロパティは、個々のセルごとに設定を変更することはできないことに注意してください。例えば、FlexLebel.BorderStyleで指定するセルの枠の表示スタイルをセル単位で変更することはできません。どのプロパティがセル単位に管理され、どのプロパティが共有されるかは、クラスごとに異なります。詳細は各クラスのドキュメントを参照してください。

 

アクセッサオブジェクト

 

セルはオブジェクトではないため、直接個々のセルを操作することはできませんが、FlexCellクラスの派生クラスが、セルへのアクセッサとして定義されています。アクセッサとは、一種のポインタでアクセッサへの操作は、アクセッサがポイントしているセルへ伝えられます。例えばFlexLabelから構成されたセルのアクセッサ、FlexLabelCellBgColorを変更すると、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の直接の子として生成されるため、すべて一意の名前をもっている必要があります。それに対して、FlexItemFlexRowSetFlexColumnSetの子とすることで階層を持って定義することができますが、そのときに同じ名前のFlexData派生オブジェクトが複数ある場合、2番目以降に定義された同名オブジェクトに対応するアクセッサを名前で利用することはできなくなります。

 

 

この例の場合、後続のLabelALabelB(黄色部分)を名前で操作することはできなくなります。FlexRowに用意されるGetColumnGetHeaderColumnメソッドを利用すると、名前ではなく位置でFlexCellを取得することができ、後続のLabelALabelBを操作する場合、

 

var lb_a = row.GetColumn(2); /* 3列目 LabelA */
var lb_b = row.GetColumn(3); /* 4列目 LabelB */

 

となりますが、表示位置を変更するとプログラムを合わせて修正する必要が発生します。

また、名前付CSVをロードする際にも後続の LabelALabelBにはデータが割り当てられることはありません。

 

同一の列名を使うとこのような制約が多く発生します。できる限り個々の列には一意な名前を付けるようにしてください。

 

アクセッサ利用の有効範囲

 

アクセッサは、行を指すFlexRowオブジェクトに従属して生成され、内部的FlexRowオブジェクトと連携して実際にセルにアクセスします。従って、アクセッサオブジェクトはFlexRowオブジェクトが失われた場合、機能する事はできません。アクセッサを利用する間は、常にFlexRowオブジェクトを維持するようにしてください。

 

表示順序とカーソル移動順序における制約

 

FlexRecordの下位に配置するFlexDataの派生クラスは、その定義順に左から右、上から下に表示されます。また、定義した順序で左右の矢印キーでカーソルが移動します。定義順序と異なる順序で表示したり、カーソル移動順序を変更することはできません。

 

FlexData派生クラスの配置における制約

 

FlexRecordの下位に配置するFlexData派生クラスは、その種類によって配置順序に制約があります。左から順に、FlexTreeHeaderFlexGroupHeaderFlexHeader、その他のFlexData派生クラスの順とする必要があります。

 

右端にFlexTreeHeaderを表示したり、FlexGroupHeaderの左側にFlexHeaderを表示することはできません。

 

FlexHeaderおよび派生クラスの配置における制約

 

FlexHeaderおよび派生クラスは、FlexLabelなどFlexHeaderから派生していないクラスとFlexRowSetまたはFlexColumnSetの下位に同居することはできません。ヘッダ系の列は常に1行を占有します。

 

FlexTreeHeaderクラスの配置における制約

 

FlexTreeHeaderクラスは、FlexRowSetの下位に配置することはできません。常に1行を占有します。

 

Mobile版における制約

 

Mobile版にはFlexRowSetFlexColumnSetFlexGroupHeaderFlexTreeHeader、およびそれに対応するFlexCellは実装されていません。

より上記クラスが利用可能になりました

 

ビジュアルスタイル有効時の制限

 

FlexItem.TitleBgColorはテーマ表示を優先するため無効になります

FlexButton.BgColorはテーマ表示を優先するため無効になります

 

スケーリング時の注意点

 

拡大時の内部有効領域の誤差をなくすためFlexViewを拡大した場合、論理的な計算値より僅かに小さいサイズに調整されます

FlexCheckButtonのチェックボックスはスケーリングの対象外です

FlexListBoxのドロップダウンボタンの幅はスケーリングの対象外です

FlexIndentLabelの折り畳みボタンはスケーリングの対象外です

 

 

プロパティ | メソッド | イベント | オペレータ

 



「オンラインマニュアル」一覧へ戻る
「Bizの宝箱」TOPへ戻る