連載:VB 6ユーザーのための
これならマスターできるVB 2005超入門

第2回 コントロール配列がなくても大丈夫!

羽山 博
2006/09/23
Page1 Page2 Page3 Page4

■データグリッドビュー・コントロールに列を追加する

 データグリッドビューでは、「番号」「IPアドレス」「アクセス回数」「最終アクセス日付」という項目を表示するので、列が4つ必要になることが分かる。これらの列はデザイン時に追加しておくことができる。

 [プロパティ]ウィンドウを使っても、データグリッドビューを右クリックして[列の追加]を選んでも列は追加できるのだが、せっかくのスマートタグなので一度使っておこう(図4)。


図4 スマートタグからタスク一覧を表示し、[列の追加]を選ぶ
  データグリッドビュー・コントロールの右上にあるスマートタグ(三角マーク)をクリックして、タスク一覧を表示。
  [列の追加]を選ぶ。実際のところ、コントロールを右クリックし[列の追加]を選んだ方が早いのだが……。

 実は、この作業に関しては、スマートタグからタスク一覧を表示するよりも、コントロールの右クリックの方が簡単。もちろん、ほかのプロパティの設定などではタスク一覧を使った方が早い場合もあるので、一概に余計な機能だとか不便だといい切ることはできないが、慣れれば右クリックや[プロパティ]ウィンドウを使った方が、素早く操作できるだろう。

 もちろん、コントロールの配置時に取りあえず主要なプロパティを設定できるという点においては、タスク一覧は便利な機能だ。

 ともあれ、[列の追加]を選ぶと、図5のようなウィンドウが表示される。ここで対話的に列を追加していくことができる。


図5 データグリッドビュー・コントロールに列を追加する
それぞれの列はコントロールとして扱われる。[名前]ボックスにその列を表すコントロール名を入力し、[ヘッダーテキスト]ボックスに列見出しの内容を入力する。[型]を指定すれば、列内にボタンやチェックボックスなども表示できる。

 例えば、「番号」の列を追加するのであれば、[名前]ボックスに列を参照するときの名前として「colNo」を入力し、[ヘッダーテキスト]ボックスに列見出しとなる「番号」という文字列を入力すればよい。そして[追加]ボタンをクリックすれば、指定された列が追加できる。

 なお、[型]では、その列のセルに何を表示するかが指定できる。例えば、ボタンやチェックボックス、イメージなどを表示することもできる(これは便利!)。

 「番号」と同様に、ほかの列も表2に従って追加しておこう。

名前 ヘッダーテキスト
colNo 番号
colIP IPアドレス
colCount アクセス回数
colDate 最終アクセス日付
表2 追加する列の名前とヘッダーテキスト一覧

 すべての列を追加したら、[キャンセル]ボタンをクリックしてダイアログ・ボックスを閉じる。あとは微調整だ。この時点では列の幅がどれも100ピクセルとなっているので、内容に合わせたサイズにしておこう*。スマートタグを使ってタスク一覧を表示してもいいし、右クリックでも構わないので、[列の編集]を選択し、図6のように設定するとよい。

* AutosizeModeプロパティの設定により、列見出しや表示されているセルにサイズを合わせるなどの指定もできるが、この例だと「番号」の部分が2行にわたって表示されるなど、思ったサイズにならないこともある。また、実行時に列幅が変更できなくなるので注意が必要。


図6 列幅を指定する
  [列の編集]を選んで各列の幅(Width)を指定しておく。ここでは「番号」は40、「IPアドレス」と「アクセス回数」は90、「最終アクセス日付」は120とした。

 VB 6では、Twipが既定の単位となっていたが、VB 2005ではピクセルが既定の単位となっていることにも注意しておこう。なお、ここでの指定はあくまでも初期値。実行時に列見出しの境界をドラッグすれば自由に列幅を変えることができる。Excelの列見出しと同じような感じだ。

 列幅の変更に伴って、フォームの幅やボタンの位置なども微調整が必要。図7がデザインの完成例だ。


図7 完成したデザイン
データグリッドビュー・コントロールとフォームの幅を広げ、[終了]ボタンを右の方に移動した。

■イベント・ハンドラを書く

 さて、そろそろ核心に近づいてきた。ウチの近所にある某いわし料理の店は、凝りに凝ったお通しが5品も出て、それを知らない人はオーダーした料理が来る前に満腹になってしまうのだが、まさにそれと同じ。このプログラムも前菜が長かったが、ようやくここからがメインディッシュだ。ひと休みしてからでもいいので、ゆっくりと味わいながら見ていこう。

 といっても、このプログラムでやるべきことは、次の2つだけなので、満腹の限度を超えて消化不良に陥ることはないと思う。

  • フォームをロードしたときにデータグリッドビューにデータを入れる
  • ラジオボタンをクリックしたときに並べ替えを実行する

 最初はプログラムの中に埋め込んだデータを表示する単純な例を見て、次にXMLファイルを読み込む例を見ていこう。

 フォームをロードしたときに実行されるイベント・ハンドラを書くには、フォーム上の、コントロールが配置されていない個所をクリックし、[プロパティ]ウィンドウの上にある[イベント]ボタン()をクリックする。表示がイベントの一覧に変わるので、「Load」イベントに対するイベント・ハンドラの名前を入力すればよい。ここでは「initProc」と入力しよう(図8)。これで、フォームがロードされたらinitProcというSubプロシージャが呼び出されることになる。


図8 イベント・ハンドラの名前を入力する
  Loadの欄に「initProc」と入力した。フォームがロードされたときにinitProcという名前のSubプロシージャが呼び出されるようになり、コード・エディタが表示される。

 VB 6では、フォームやコントロールをダブルクリックすれば、最もよく使われるイベント・プロシージャが挿入され、[コード]ウィンドウが表示された。VB 2005でもその方法は使えるが、あえてこの手順でやることには一般に次のようなメリットがある。

  • ほかのイベントが選びやすい
  • イベント・ハンドラに好きな名前を付けられる

 とりわけ重要なのが、後者のイベント・ハンドラの名前を自分で指定できるということ。VB 6までは、「プロシージャ名_イベント名」に固定されていたが、VB 2005では、イベントとイベント・ハンドラは1対1の対応でなくてもよいということになる。正確にいうと、多対多の対応になるのだが、それは後ほどでもう一度触れることとしよう。

 概念的な話が少し長くなったが、イベント・ハンドラの名前を入力して、[Enter]キーを押すと、コード・エディタが表示される。最初の例はプログラムの中でデータを用意するので、図9のように地道に入力していけばよい。


図9 フォームのLoadイベント・ハンドラ
データグリッドビューの行全体を表すコレクション(Rows)のAddメソッドを使って1行追加。0行0列目のセルの値に1を代入、0行1列目のセルに「192.168.1.2」を代入するといった具合になる。

 コードの意味を念のため丁寧に日本語で書いてみると、以下のようになる(図10)。


図10 コードの意味を詳しく見てみる
最初の数行だけを日本語で説明した。残りのコードも同じパターンで、値を代入するセルの位置が違うだけだ。同じコントロールのプロパティやメソッドを使う行が続くときはWithステートメントが便利。


 INDEX
  連載:VB 6ユーザーのためのこれならマスターできるVB 2005超入門
  第2回 コントロール配列がなくても大丈夫!
    1.サンプル・プログラム2 − XML文書を表示する
  2.データグリッドビューに列を追加する/イベント・ハンドラを書く
    3.本筋に戻って 〜 イベント・ハンドラを共有する
    4.デザートも豪華 〜 XML文書を読み込んで表示する
 
インデックス・ページヘ  「これならマスターできるVB 2005超入門」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH