グリッドコントロールの活用
VB2.0で初めてグリッドを見た時、「これで俺にもエ○セルが作れる!」とワクワクしたものでした。しかし、いざ使おうとしてみると、「文字の入力ってどうすれば良いのだろう?」と頭を抱えてしまいました。
ちょうどカーソルが指しているセルにTextBoxをかぶせてみようとしたけど上手くいきません。縦横にスクロールしてしまうと、セル位置の座標が分からなくなってしまうのです。
皆さんなら、どうしますか?
答えは簡単ですね。Form上のグリッドとは別の位置、例えばGridの真上にTextBox
を配置して、Gridのセル内容をコピーしてやればいいのです。また、TextBox に文字が入力された時にはセルの方も変えてやります。
--- Sample Code ------------------
Private Sub Grid1_RowColChange()
Text1.Text = Grid1.Text
End Sub
Private Sub Text1_Change()
Grid1.Text = Text1.Text
End Sub
---------------------------------
この例では、ユーザーは文字を入力するためにいちいちTextBoxをクリックして入力可能な状態にしなければなりません。よりユーザに優しいインターフェイスを考えるなら、次の点を考慮する必要があります。
具体的な動きは表計算ソフトを動かしてみて、どのようなインターフェイスを取っているのかを研究するとよいでしょう。
ところで、Gridを使った面白いテクニックを一つ紹介しましょう。
Gridコントロールは見た目上、2次元配列そのものなので配列の格納に使えるということです。
プログラミングで2次元配列を使うときは
Dim abc(10,10)
と宣言してメモリ上の配列を使うのが原則(というよりは常識)ですが、Grid
のRowsとColsプロパティを11にしておいて、セルにいちいち値を書き込んだ方がビジュアルにデバッグできます。もちろん、純粋な2次元配列でなくてもレコード型データを複数レコード保存することもできますよね。
上図のプログラムでは、ファイルから読み込んだデータの内、直接ユーザーには見せたくないデータをメインのテーブルと同じ行数を持つテーブルに保存するという方法をとりました。
例えば、「金額」×「日数」の結果を保存してプログラムからいつでも取り出せるようにしておきたいとします。
普通ならDimで配列を取って結果を保存するようにするのですが、計算式が複雑な場合や式自体が幾つもあるときはデバッグをする上でとても厄介です。また、設計時に想定していないデータが入れられたためにプログラムがコケた(それも納品後に客先のマシンで)時の原因究明にも利用できます。
「ユーザに見せたくないデータをGridに表示するのは矛盾してるんじゃないか」って?
GridのVisibleプロパティをFalseにしておいて、あるキーが押された時にTrue
にしてやればいいのです(一種の隠しコマンドですね)。私は別FormにGridを貼り付けて、そのフォーム上にあらゆるデバッグ情報を表示するようにしました。
このほかにも利用法としては、アンドゥ機能を実装するために変更前のデータを保存する所としても使えます。
但し注意することが一つあります。
Gridへのデータの書き込み&読み込みはメモリへのアクセスに比べて格段に遅いということです。従って、配列は何でもかんでもGridに置き換えるということは禁物です。