複数列のリストボックスを作成する
列が複数あるリストボックスを作成する方法を確認します。
表示したい値の配列を作成し、その配列を「List」プロパティを使って設定します。具体的な記述は次のようになります。
Sub テスト() Dim foodsArray(2, 2) foodsArray(0, 0) = "りんご" foodsArray(0, 1) = "100円" foodsArray(1, 0) = "オレンジ" foodsArray(1, 1) = "80円" Load sampleForm sampleForm.listFoods.ColumnCount = 2 sampleForm.listFoods.List() = foodsArray sampleForm.Show End Sub
リストボックスに何列表示するかについて「ColumnCount」プロパティを使って指定しています。
object.ColumnCount [= Long]
表示する列の数を設定します。 引数: object 設定するオブジェクトを指定します。 Long 表示する列の数を指定します。
作成した後で各項目の値を変更するには同じく「List」プロパティを使います。
object.List( row, column ) [= Variant]
指定した行と列のリストの項目を返します。 引数: object 設定するオブジェクトを指定します。 row 0 以上で、リストの項目数から 1 を引いた数以下の整数値を指定し ます。 column 0 以上で、列の数から 1 を引いた数以下の整数値を指定します。 Variant 項目の内容を指定します。
「List」プロパティは値を取得する時にも利用しましたが、設定したい行及び列を引数に指定して値を指定します。
具体的には次のように記述します。
Sub テスト() Dim foodsArray(2, 2) foodsArray(0, 0) = "りんご" foodsArray(0, 1) = "100円" foodsArray(1, 0) = "オレンジ" foodsArray(1, 1) = "80円" Load sampleForm sampleForm.listFoods.ColumnCount = 2 sampleForm.listFoods.List() = foodsArray sampleForm.listFoods.List(0, 0) = "メロン" sampleForm.Show End Sub
最初に配列を指定せずに「List」プロパティを使って各項目を指定しても出来るかと思いましたが、その場合何故かエラーとなります。
サンプルプログラム
では簡単なサンプルで試してみましょう。
Sub テスト() Dim foodsArray(2, 2) foodsArray(0, 0) = "りんご" foodsArray(0, 1) = "100円" foodsArray(1, 0) = "オレンジ" foodsArray(1, 1) = "80円" Load sampleForm sampleForm.listFoods.ColumnCount = 2 sampleForm.listFoods.List() = foodsArray sampleForm.listFoods.List(0, 0) = "メロン" sampleForm.Show End Sub
上記マクロを実行すると次のように表示されます。
各列の幅の設定
複数の列を利用する場合に列毎の幅を設定するには「ColumnWidths」プロパティを使います。
object.ColumnWidths [= String]
各列の幅を設定します。 引数: object 設定するオブジェクトを指定します。 String 列の幅をポイント単位で指定します。空白にするか、-1 を指定し たときには列幅が算出されます。幅が 0 に設定された列は表示されませ ん。ポイント以外の単位で指定する場合は、単位を明示してください。
複数の列の幅を同時に指定するときは、セミコロン (;) を区切り記号に使います。使用例としては次のようになります。
Sub テスト() Dim foodsArray(2, 2) foodsArray(0, 0) = "りんご" foodsArray(0, 1) = "100円" foodsArray(1, 0) = "オレンジ" foodsArray(1, 1) = "80円" Load sampleForm sampleForm.listFoods.ColumnCount = 2 sampleForm.listFoods.List() = foodsArray sampleForm.listFoods.ColumnWidths = "90;72;90" sampleForm.Show End Sub
この場合、1 列目は 90 ポイント (1.25 インチ)、2 列目は 72 ポイント (1 インチ)、3 列目は 90 ポイントに設定されます。
列幅の指定をすべて省略すると、各列の幅は、コントロール自体の幅を均等割りした値となります。指定した列幅の合計がコントロール自体の幅より大きいと、リストは左端揃えで表示され、コントロールの表示領域の中に収まりきれない右端の列は表示されません。
( Written by Tatsuo Ikura )