技術解説 |
FreeGridの構成 |
最終更新日:2007/04/26
全面改訂 |
●概要
ラフな仕様を元に、基本的なコントロールの構成を具体的に検討する。
●構造定義
○行列
主機能である二次元情報を表示することから、縦横の概念が必要で、これを、
- 列(Col):二次元マップの縦方向の集まりで、0から数える。
- 行(Row):二次元マップの横方向の集まりで、0から数える。
とする。データベースでは、行が、一つのレコードに対応する。
○セル
セルは、(列、行)で特定する。
・固定行、列
見出しで、列見出しは、左の0列から始まり、連続するものとする。行見出しは、上の0行から始まり、連続するものとする。
●表示範囲と方法
○全体規則
- コントロールのその時のサイズが表示領域となる。
- 固定列があれば、それが必ず左端を常に占有する。
- 固定行があれば、それが必ず上端を常に占有する。
○表示セルサイズ
- デフォールトでは、そのセルに対応するObjectを文字列やビットマップにしたときのサイズで自動的に決まる。
- 必要であれば、列幅を指定できる。この場合、幅が不足する場合は、自動的に折り返され、行高も自動調整される。
○スクロール
- サイズによっては全体が表示できないので、自動的にスクロールモードになる。
- スクロールは必要に応じて、列 or/and 行になる。
- 固定列は、水平スクロールされない。
- 固定行は、垂直スクロールされない。
●情報保持
- 設定された情報源は、内部で、Object配列として保持する。
- セルはObjectへの参照である。表示は、Object.ToString(デフォールト/指定Format)
である。Imageの場合は、画像。
- 表示情報については情報源を解析して配列化する。行や列マージがあれば、これを処理する。このとき、全てのセルサイズが明らかとなっている。
- 実際に表示する場合は、必要な文字列範囲から抜き出した配列を生成する。
●高速化
本来は、一つのプロパティの更新や、セル内容の変化があれば、全て最初から処理することになるが、これではセル数が増えてくると、表示に時間が掛り問題となる。以下のようにしている。
○更新中非表示処置
BeginUpdateメソッドを準備し、これと、EndUpdateまでは、表示を更新しないようにした。これで、例えば、セル内容を逐次設定、変更するような処理が高速化される。BeginUpdateしなければ、かなり遅くなる。
○再描画の原因を解析して処置
例えば、移動、隠れていた部分が見えるようになった場合は、単純な再表示で良いので、一々、表示情報を最処理する必要はなく、決められた情報を再表示するなどとしている。
|