- ベストアンサー
VBでコンボボックスをテーブルのように扱いたい
- VB.net 2010を使用して、コンボボックスをテーブルのように扱いたいです。
- 外部テキストファイルからデータを読み込んで、コンボボックスに表示し、ボタンを押した際に選択したデータを他のデータと組み合わせて表示させたいです。
- 例えば、選択した人名とその他のデータを結合して別のテキストボックスに表示させたいです。また、コンボボックスには人名のみを表示させることもできれば良いと思っています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは サンプルを作成してみました。 Public Class Form1 Const COM_NAME As String = "名前を表示します。" '一行をカンマせ区切った部分の配列 Dim itm() As String '一行をカンマで区切った部分の3番目のリスト Dim ar As New List(Of String) Private Sub f() Handles MyBase.Shown 'ComboBox1に最初に表示される文字 ComboBox1.Text = COM_NAME 'ファイルを読み込んで行を配列に格納 Dim line() As String = IO.File.ReadAllLines("C:\test\test1.txt", System.Text.Encoding.GetEncoding("shift-jis")) 'lineの要素をループ For Each comtxt As String In line '一行をカンマで区切って配列に格納 itm = comtxt.Split(",") '3番目をリストにAddする ar.Add(itm(2)) 'ComboBox1に一番目の配列を表示 ComboBox1.Items.Add(itm(0)) Next End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'カスタムエラー If ComboBox1.Text = COM_NAME Then MsgBox("名前を選択してください。") Return End If 'ComboBox1で選択されたインデックスを取得 Dim num As Integer = ComboBox1.SelectedIndex 'ComboBox1で選択されたアイテムを取得 Dim nam As String = ComboBox1.SelectedItem 'TextBox1に表示 TextBox1.Text = nam & "-" & ar(num) End Sub End Class あの~ >山崎 - 10001 は山崎-11111でしょうか?
その他の回答 (1)
- 田中 裕之(@bybalsendercase)
- ベストアンサー率88% (56/63)
こんばんは エラーの内容は「インデックスが配列の境界外です。」のエラーでしょうか? こちらでは、 ar.Add(itm(0)) ar.Add(itm(1)) ar.Add(itm(2)) ar.Add(itm(3)) は問題なく動作します。 ar.Add(itm(4))は項目が4列しかありませんので下記のエラーになります。 「インデックスが配列の境界外です。」 あとはpiyo-maru7さんのテキストファイルの項目を見る限り ar.Add(itm(0)) ar.Add(itm(1)) ar.Add(itm(2)) ar.Add(itm(3)) は通るはずなんですけど。 エラー内容が気になります。
お礼
bybalsendercaseさま エラーについては私の勘違いでした。テキストファイルのデータが不十分で、配列分だけの個数が無かったせいでのエラーでした。 たびたび回答していただいてありがとうございました。 ほかのCSVデータインポートにも、このサンプルプログラムを利用させていただきます。
お礼
サンプルプログラムまで作って頂き、ありがとうございます! きっちり動きました。 ひとつだけ疑問なのですが、ar.Add(itm(2)) の部分を1,2,3に変更するとエラーになります。配列につっこんでいるだけのように思えるのですが、何故でしょうか?今後のために教えていただけると幸いです。