VBでコンボボックスをテーブルのように扱いたい

このQ&Aのポイント
  • VB.net 2010を使用して、コンボボックスをテーブルのように扱いたいです。
  • 外部テキストファイルからデータを読み込んで、コンボボックスに表示し、ボタンを押した際に選択したデータを他のデータと組み合わせて表示させたいです。
  • 例えば、選択した人名とその他のデータを結合して別のテキストボックスに表示させたいです。また、コンボボックスには人名のみを表示させることもできれば良いと思っています。
回答を見る
  • ベストアンサー

VBでコンボボックスをテーブルのように扱いたい

VB.net 2010での質問です。 外部テキストファイルを読み込んで、フォーム上のコンボボックスに入れるのは簡単にできましたが、 ボタンを押したときに、選んだコンボボックスの該当データのうち一部だけを取り出して他データとからめつつ処理して表示させたいのです。 テキストファイルが以下のようになっています。データ件数は多くはありません。 阿部,北海道,10001,2001/05/01 山崎,東京都,11111,2003/09/25 ボタンを押した時には、別のテキストボックスに 山崎 - 10001 と表示させたいのです。贅沢を言えば、コンボボックスには人名のみが表示されるようにできれば素晴らしいです。 どうかよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちは サンプルを作成してみました。 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でしょうか?

piyo-maru7
質問者

お礼

サンプルプログラムまで作って頂き、ありがとうございます! きっちり動きました。 ひとつだけ疑問なのですが、ar.Add(itm(2)) の部分を1,2,3に変更するとエラーになります。配列につっこんでいるだけのように思えるのですが、何故でしょうか?今後のために教えていただけると幸いです。

その他の回答 (1)

回答No.2

こんばんは エラーの内容は「インデックスが配列の境界外です。」のエラーでしょうか? こちらでは、 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)) は通るはずなんですけど。 エラー内容が気になります。

piyo-maru7
質問者

お礼

bybalsendercaseさま エラーについては私の勘違いでした。テキストファイルのデータが不十分で、配列分だけの個数が無かったせいでのエラーでした。 たびたび回答していただいてありがとうございました。 ほかのCSVデータインポートにも、このサンプルプログラムを利用させていただきます。

関連するQ&A

  • VBでコンボボックスとテキストボックスの連係

    VBでフォームにデータコンボボックスとテキストボックスを一つづつ作り、データコンボボックスで値を選択し、その値に対する値をテキストボックスに表示させたいんですがどうすればいいでしょうか? データコンボボックスで選択する元になるテーブルは ID | 商品 1 | みかん 2 | ばなな 3 | りんご と、上記のような形のテーブルをもちいています。 例えばデータコンボボックスで「1」を選択した場合テキストボックスに「みかん」と表示させたいです。

  • ACCESSのコンボボックスについて

    ACCESSでコンボボックスを使っているときに たまに入力できなくなってしまう時があり困っています。 例えばA,B,Cという3つのデータを選択できるコンボボックスがあり、 現在、Aが選択されていてBに変更しようとした時に コンボボックスの表示部分が突然空欄(または選択されているのに表示されていない)になってしまいます。 その後、どれを選択してもコンボボックスには何も表示されなくなってしまいます。 この現象が起こるとなぜか同じフォーム内のボタンなどにも不都合が起こるようになってしまいます。 (テキストボックスのデータを削除するボタンがあるのですがおしてもなにも起こらなくなってしまいました) いろいろ試しているのですが全く原因がわかりません。 どのようなところに原因がありそうかなどあれば教えてください。 宜しくお願いします。

  • VB.NET コンボボックスの表示について

    vb2010で作成しています。 コンボボックスの表示 ⇒ 更新をどう処理するのか分かりません。 例えば下記のようなフルーツテーブルがあったとします。 ・リンゴ ・ミカン ・モモ テーブルから「ミカン」を取得し、コンボボックスへ表示する所までは出来ました。 その後に、「ミカン」から「リンゴ」に変換したい場合、テーブルからコンボボックスへデータを渡すと、 ・ミカン ・リンゴ ・ミカン ・モモ と「ミカン」が2個表示されてしまいます。 こういう場合どのようにプログラムを作成するのがベストなのでしょうか? 自分で試したのは、ミカンの情報を保持したまま、一旦コンボボックスをクリアし、 そのあとミカン以外のデータを再度読み込み、コンボボックスへ渡すようにしました。 結果は ・ミカン ・リンゴ ・モモ となります。 無駄な処理をしているとしか思えず、他に良い方法があるように思い、質問させて頂きました。 VB.NETは現在手探りで作っている感じで分からない事が多いのですが、分かる方がいらっしゃったら教えて下さい。 よろしくお願い致します。

  • VB6のコンボボックスのテキストプロパティ

    VB6のコンボボックスのテキストプロパティですが、 Combo1.text="test"と入れてもコンボボックスにtestと表示されません。 Form_Loadモジュールに記載するとtestと表示されるのですが、 最初testと表示されていて、コンボボックスの候補を一つ選んで、 今の設定ではその候補は使用できないので、初期状態のtestという表示に戻したいのですが、 testに戻りません。

  • コンボボックスからテキストボックスに連続して値を出したい

    エクセルVBAのユーザーフォームで、コンボボックスで選択したものをコマンドボタンを押すことで、同じフォーム上のテキストボックスに表示するところまではできたのですが、同じテキストボックスに追記する形でコンボボックスで選択したものを表示したいのですが、可能でしょうか。テキストボックスは複数行表示できるようにプロパティのMultiLineはTlueに設定することはしたのですが、2回目以降コンボボックスで選択した後コマンドボタンを押してもそのまま上書きするようなコードしかわかりません。 テキストボックスに、20回目まで選択項目を追加表示し、最後にはエクセルのシートにそのデータをコピーしたいのです。果たして、そのようなことは可能でしょうか。可能であればどのように記述すればよいのでしょうか。ぜひ諸先輩方のお知恵をお貸しください。よろしくお願いします。

  • Access テキストボックスとコンボボックス

    Access初心者で、勉強がてらデータ登録フォームを作成しています。 フォーム上にコンボボックスを設置し、 テーブルに保存されているデータを検索できるようにしたのち、 テキストボックスのコントロールソースには簡単に 「=[コンボボックス].[column](2)」としています。(それぞれの名前は仮称です) 後から、テキストボックスひとつで 「コンボボックスからの検索結果を表示させる」と 「テキスト入力も可能とする」 を共存させたいと思い始めたのですが、可能になりますでしょうか。 ただし「コンボボックスからの検索結果表示」をしたテキストボックスに対し、 その情報をフォーム上で書き換えたとしても、テーブル側のデータ書き換えは行いたくありません。 よろしくお願いいたします。

  • vb6のコンボボックスの操作について

    おはようございます。 vb6+MDBの環境下で、コンボボックスについて質問です。 マスタとなるテーブルA(都道府県など)と、一般的(?)なデータを日々貯めていくテーブルBがあり、 Bに、Aのキーとなる値が保存されています。 テーブルデータBの表示・更新画面を作っているのですが、 テーブルAの内容を画面上のコンボボックスに選択項目としてADDして表示するところまでは出来たのですが、以下のことを実現するには、コンボボックスにどういう記述で実現するのかわかりません。 1.テーブルBに持っているAの都道府県コードに該当する項目を、Bのデータ選択時に表示したい。 【テーブルA】 Aのキーコード,都道府県名 【テーブルB】 Bのキーコード,Aのキーコード,住所… このような場合、イベント時にコンボボックスをどのように処理するようにソースを書けば実現できますか?

  • データと直結したコンボボックスについて

    初めて質問します。 VB6とオラクルでの開発でコンボボックスを使います。 ユーザーの要望は、途中まで入力した内容に合うデータをコンボボックスのリストに表示して欲しいとのことなのですが、VBに入っている通常のコンボボックスで対応できるんでしょうか? また、出来なければ利用可能なツールなどがありましたら教えてください。

  • コンボBOXとテキストBOXの連携の仕方

    コンボBOXとテキストBOXの連携の仕方を教えてください。 データテーブルに ID 色 1 赤 2 白 3 黄 4 青 というデータがあります。 メインフォームのID用コンボBOXにデータテーブルのIDリストを表示して選択できるように設定しました。 IDコンボBOXの横に、色用テキストBOXを作って、コンボに「1」と入れたらテキストBOXに「赤」と自動的に表示させたいのですがどのようにすればよいか教えてください。

  • テキストボックスとコンボボックス

    こんにちは、Accessのフォームにテキストボックスとコンボボックスを設置して、以下のような事ができないかと悩んでおります。 フォーム内には、テキストボックスとコンボボックスが設置してありまして、コンボボックス内にDB(会社名テーブル)から取得した全ての会社名が入っています。 しかし、そのレコード数が300件近くあるため、コンボボックス内から探し出すのに手間が掛かります。 そこで、コンボボックスの隣にテキストボックスを設置し、テキストボックス更新後に会社名テーブルの検索を行い、条件に合った会社名だけをコンボボックス内に入れることを考えているのですが、上手く行きません。 動作のイメージとしては下記のようになります。 (1)初期表示時はテキストボックス内に何も入力されていないので、全レコードがコンボボックス内に表示される。 (2)テキストボックスに「有限」と入力して、テキストボックスからフォーカスを移動させると、コンボボックス内に「有限」が会社名に含まれているレコードのみが入っている。 (3)テキストボックスを空白に戻すと、コンボボックス内には全レコードが表示 以上、どなたかご教授よろしくお願いします。

専門家に質問してみよう