プロが教える店舗&オフィスのセキュリティ対策術

Cでの開発経験はありますが、VBに関しては初心者です。

現在現在VBを使用したシステムを作成するにあたり、ユーザーインターフェイスを検討するため、DBアクセス部を省略したプロトタイプを作成しています。
このシステムでは商品カテゴリを選択するコンボボックスと、選択されたカテゴリの商品一覧を表示するリストボックスからなるものです。
以下のようなプログラム(Cとのごちゃ混ぜですみません。)を作成すればとりあえず動くものは簡単にできるであろうと考えたのですが、VBでの初期化済み配列変数の定義の仕方が分からず困っています。
VBではどのようにすれば良いのでしょうか?
また、VBでこのようなことができない場合、通常はどのようにするものなのでしょうか?


struct Shouhin {
char name[100];
int price;
};

struct Shouhin shouhin_list[][] = {
{
{"鉛筆", 40},
{"ボールペン", 100}
}, {
{"大学ノート", 100},
{"お絵かき帳", 200}
}
};


---


' コンボボックスでの選択に合わせてリストボックスの内容を切り替える。
Private Sub ComboBox_Click()
ListBox.list = shouhin_list[ComboBox.ListIndex]
End Sub

A 回答 (1件)

こんな回答で良いのでしょうか。


VBでは、1次元配列に限り、関数でArrayがあります。VBAでも使えます。
Youbi=Array("日曜","火曜","水曜","木曜","金曜","土曜")
のように使います。
A=youbi(2)でAに文字列の水曜が入ります。
二次元のデータを扱うときは,次元数が2,3次元程度なら
下記で凌げます。文字列、数値をまぜても差し支えない。
Youbix=Array("日曜",6,"月曜",6,"火曜",5,"水曜",6,"木曜", _
6,"金曜",6,"土曜",5)

    日曜      6(出席者6人とか色々の意味あり)
    月曜      6
    火曜      5 
    水曜      6
     ・
     ・
    土曜      5
の2次元表が定義できます。
使うときは
    For i=0 to 11 step 2
       you=youbix(i)  
       ninnzu=youbix(i+1)
      (処理 略)
    Next i
で使えます。 
とび先(ブランチ先)を配列にしたいときは、不勉強で
経験ありません。
誰かご存知の方答えてください。
コントロール配列と言うのも別にあります。
VBでは区切りセミコロンがないので、行を次ぎに変えて
続けるときは、スペース+アンダーバーを使います。
     以 上
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
先にも書きましたが、VBビギナーのため、ご回答内容を理解、検討するのに時間がかかり、お礼が遅くなってしまいました。
申し訳ありません。

ご回答を参考に私なりに試行錯誤した結果、一応目的は達せられました。
以下にその過程を記述します。


質問ではユーザー定義型Shouhinの配列を用意することを考えていましたが、Array関数の引数にユーザー定義型データを与えることはVBの仕様で不可能でした。

最終的にはリストボックスに表示するので、特にユーザー定義型である必要はありませんので、"鉛筆 40"、"ボールペン 100"のような文字列の配列を作成すればよいかと考えました。
しかし、"_"による行連結は最大10までしかできませんでした。
(質問中のサンプルはフィールド数もデータ数も少ないのですが、作成しようとしているシステムはリストボックスに通常数百個の項目が並ぶもので、プロトタイプでもスクロールが行える程度の数(20個ぐらい)のレコードが必要です。)

最後に、ご回答の最後の方で触れられているコントロール配列を以下のように使ってみて一応目的は達せられましたが、imogasiさんの想定されていたのはこのようなものでしょうか?


---


1. 商品を表示するためのリストボックス(lstShouhinListView)とは別に、データを保持するためだけの、非表示リストボックスを商品カテゴリの数だけ用意し、これらをコントロール配列(lstShouhinListData())とする。
(商品のリストの内容はフォームデザイナのプロパティウィンドウで設定する。)

2. コンボボックスにてカテゴリが選択されたら、選択されたカテゴリのデータ保持用ListBoxの内容を、商品一覧表示用のリストボックスへコピーする。

Private Sub cmbCategory_Click()
  Dim lb As ListBox
  Dim i As Integer

  Set lb = lstShouhinListData(cmbCategory.ListIndex)
  lstShouhinListView.Clear
  For i = 0 To lb.ListCount
    lstShouhinListView.AddItem (lb.List(i))
  Next
End Sub

お礼日時:2001/10/12 16:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!