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