Visual Basic 6.0 初級講座 |
第11回 リストボックス と コンボボックス
一覧(いちらん)を表示したり、表にしたりする機能はアプリケーションとして重要です。ゲームだってアイテムを一覧で表示したりするでしょうし、業務用のアプリケーションでは一覧や表こそがメインという物も少なくないでしょう。今回は簡単な一覧を表示する機能を持ったリストボックスとコンボボックスについて説明します。
リストボックスとコンボボックスのアイコンは下の画像を見てください。
まずは、一覧を作成しましょう。ただし、ここからはプログラム用語を使って「一覧」ではなく「リスト」ということにします。リストの作成方法はリストボックスでもコンボボックスでも同じですのでここではリストボックスを例に説明しましょう。
フォームにリストボックスを一つ貼り付けてください。
そして、Form_Load()プロシージャに次のようにコードを入力してください。
Private Sub Form_Load() List1.AddItem "日本" List1.AddItem "アメリカ" List1.AddItem "中国" End Sub |
まずは、この状態で実行してみましょう。もう、たったのこれだけでリストを表示することができることがおわかりでしょう。リストに項目を追加するには AddItem メソッドを使えばよいのです。しかも、さすがVB、わざとリストボックスのたて幅を小さくしてから実行してみてください。そうすると、親切にスクロールバーまで表示してくれるのです。
しかし、この例はリストに項目が3つしかないので良いのですが、10個も20個もあったらいちいち打つのは大変ですね。それでもやっぱり、なにを項目に加えるかはプログラマが指示しなければ行けないのでがんばってかくしかありません。ただ、少しだけ楽をできます。
上の例は、この下のようにしても全く同じ結果となります。いや、本当はちょっと異なるんです。こっちのほうがスピードが速いのです。(といっても人間には分からないくらいどちらも速い)。
Private Sub Form_Load() With List1 .AddItem "日本" .AddItem "アメリカ" .AddItem "中国" End With End Sub |
それでは、リストをクリックしたらその国のあいさつを表示するプログラムを作りましょう。
「クリックしたら・・・・する」プログラムを作るときは Click() プロシージャにコードを書きます。今回は「リストをクリックしたら」というプログラムなので List1_Click() プロシージャに書けばよいわけです。とは言ってもこのあたりはVBが自動的にやってくれるので安心です。配置したリストをダブルクリックすると自動的に List1_Click() が表示されたでしょう?
では、次のように打ち込んでください。
Private Sub List1_Click() Dim St As String St = List1.Text Select Case St Case "日本" MsgBox "こんにちは" Case "アメリカ" MsgBox "ハロー" Case "中国" MsgBox "ニーハオ" End Select End Sub |
打ち込みが終わったら実行してみましょう。リストに表示されている国の名前をクリックしてください。その国の挨拶(あいさつ)が表示されます。
それでは、解説します。Dim St As String は 変数Stを使う宣言です。国の名前は「文字列」なので、マジ列を表す String で宣言をします。そして、St = List1.Text で、クリックされた国の名前を St に代入します。たとえば「中国」をクリックした場合はこの時点で St = "中国" となります。
次の Select Case はたいへんよく使うので覚えておきましょう。
Select Case St は 「St によって判断しなさい。」という命令です。その下の Case "日本" は 「St が "日本"だったら・・・」という分岐です。この場合は MsgBox "こんにちは" で 「こんにちは と表示しなさい。」ということですね。以下 "アメリカ"だったら"ハロー"と表示しなさい。"中国"だったら"ニーハオ"と表示しなさい。という意味です。最後の End Select は必ずつけてください。これがないとコンピュータにはどこまでが "中国"だったら の命令なのか分からないからです。
このプログラムができれば基本は大丈夫です。コンボボックスでも同じことができるのでやってみてください。そのときは上のプログラムの List1 部分を Combo1 に変えるだけです。リストボックスとコンボボックスで何が違うかも分かるでしょう。
※このとき、コンボボックスをダブルクリックすると Combo1_Click()プロシージャではなくCombo1_Chenge()プロシージャが自動的に作成されるので、プロシージャボックスで自分でClickを選んでください。プロシージャボックス の場所がわからない場合はこの図を参照してください。
3.配列
どのコントロールもそうですが、とりあえず使えるようになるのは簡単です。でも、つかえるようになってからいろいろ試してみると「おぉ!こんなこともできたのか!」ということが多いです。もちろんリストボックスやコンボボックスでもそうです。けれど、今はまだそんなに細かいところまでやるときではないと思いますので、もうちょっとだけ細かい使い方を説明するにとどめましょう。
まず、リストボックスに表示されている項目は「アイテム」と呼ばれます。そして上から順番に番号がついています。たとえば、先ほどの例で「日本」は0番のアイテム、「アメリカ」は1番のアイテムと言った感じです。番号は 0 からはじまるので注意してください。
この順番のことを「アイテムの配列」と言いますが、このことは番号で項目を指定できることを意味します。
もし、 X = List1.List(0) としたら、Xには何が代入されているか分かりますか?プログラムで試してみましょう。
先ほどのプログラムにコマンドボタンを追加して、次のように打ってください。
Private Sub Command1_Click() Dim X X = List1.List(0) MsgBox X End Sub |
実行してコマンドボタンを押すと 日本 と表示されたでしょう。このように配列の番号でリストの項目を取得することもできるのです。
これを利用して次のようなことができます。
・リストにいくつ項目があるか調べる。
X = List1.ListCount とすると X には項目の数が代入されます。今までの例では「日本」「アメリカ」「中国」の3つがあるので、X = 3 となります。
・リストの何番目がクリックされたか調べる。
X = List1.ListIndex とするとリストボックスをクリックしたとき、クリックされたのが何番目の項目か知ることができます。
・リストの指定した位置に項目を追加する。
ただ単に AddItemメソッドを使ったのでは、リストの一番最後にアイテムが追加されます。しかし、 AddItem "フランス", 1 のように数字で何番目に追加するかを指定することもできます。ただし、先頭は 0 なので気をつけてください。この例では フランス は2番目に追加されます。
・項目を削除する。
List1.RemoveItem 2 のようにすると指定された番号のアイテムが削除されます。この例では上から 3番目の 項目(「中国」)が削除されます。
なお、すべての項目を消すには List1.Clear とします。
今回は少し短いですがここまでです。リストボックスやコンボボックスにはここで説明したほかにもいろいろな機能がありますから、自分でプロパティウィンドウやクイックヒント、オブジェクトブラウザなどを見ながら積極的に実験してみてください。