VB2008 コンボボックスとテキストボックスの連動について
VB2008 コンボボックスとテキストボックスの連動について
VBを使って顧客の検索などに使用するプログラムを作りたいと思っています。
項目1-1,項目1-2,項目1-3,項目1-4,項目1-5
項目2-1,項目2-2,項目2-3,項目2-4,項目2-5
項目3-1,項目3-2,項目3-3,項目3-4,項目3-5
上記のデータ名 TextFile1.txt
Dim fn As String = "C:\TextFile1.txt"
Dim dline() As String
Dim d() As String
Dim ad As ArrayList = New ArrayList()
Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default)
dline = Split(read.ReadToEnd, vbCrLf)
For i As Integer = LBound(dline) To UBound(dline)
d = Split(dline(i), ",")
ad.Add(d(0))
Next
ComboBox1.DataSource = ad
ComboBox1.text="顧客名"
以上が現在の状況です。
comboに項目1-1,2-1,3-1とセットされていますが、マウスのスクロールボタンを動かすと、項目1-1が最初に表示されず2-1が表示されます。通常にクリックして選択すると問題は無いのですが、出来ればマウスのスクロールボタンも使いたいと思いますが解決方法はあるのでしょうか。
もう1件お伺いしたいのですが、上記テキストファイルからデータを読込、項目1-2,1-3,1-4,1-5、項目2-2・・・、項目3-2・・・と、項目毎にコンボボックスと連動させて各テキストボックス1、2、3、4に表示させたいのですが、上手くいきません。長文で解りにくい点があるかと思いますが、よろしくお願い致します。
投稿日時 - 2008-08-09 13:44:54
コンボボックスの中身が以下のようになっているのであれば、あとはNo2さんの提示してくれたやり方でできるのではないでしょうか?
ComboBox1
[0]:ササキ
[1]:スズキ
[2]:サトウ
[3]:ハヤシ
ComboBox2
[0]:北海道
[1]:福岡県
[2]:愛知県
[3]:北海道
ComboBox3
[0]:札幌市
[1]:福岡市
[2]:名古屋市
[3]:旭川市
このようになっていないのであれば・・・
0.変数を定義(必要になったらそのつど定義でも問題ないです)
・1行読み込みsplitした結果を入れる配列→srcAry
・↑の結果の[0]の内容を入れるList→nameList
・↑の結果の[1]の内容を入れるList→adr1List
・↑の結果の[2]の内容を入れるList→adr2List
1.テキストファイルから1行読み込む
2.読み込んだ内容をカンマでsplitし、srcAryに格納
3.各リストに追加していく。nameList.add(srcAry(0))、adr1List.add(srcAry(1))、adr2List.add(srcAry(2))
4.1~3をテキストファイルの行数くりかえす。
5.ComboBox1にnameList、ComboBox2にadr1List、ComboBox2にadr2Listを設定する。
各コンボボックスが変更された場合の動作についてはNo2さんのソースを参考にしてください。
投稿日時 - 2008-08-12 09:56:20
ご回答ありがとうございます。
現在の状況を書かせていただきます。
ComboBox1 ↓この形でセットされてます。
[0]:ササキ
[1]:スズキ
[2]:サトウ
[3]:ハヤシ
ComboBox2
[0]:北海道
[1]:福岡県
[2]:愛知県
[3]:北海道
ComboBox3
[0]:札幌市
[1]:福岡市
[2]:名古屋市
[3]:旭川市
combobox2とcombobox3が自分ではどうしても上記の形にセット出来ません。セットしようとするとcombobox1と同じ名前がセットされてしまいます。現在の状況を下記のとおり書いてみましたが、何度も申し訳ありませんがアドバイスをよろしくお願い致します。
Dim dline() As String
Dim namelist As ArrayList = New ArrayList()
Dim adr1list As ArrayList = New ArrayList()
Dim adr2list As ArrayList = New ArrayList()
dline = Split(Read.ReadToEnd, vbCrLf) ←「1.テキストファイルから1行読み込む」
Dim srcary() As String
For i As Integer = LBound(dline) To UBound(dline) ←「4.1~3をテキストファイルの行数くりかえす。」
srcary = Split(dline(i), ",") ←「・1行読み込みsplitした結果を入れる配列→srcAry」
namelist.Add(srcary(0)) ←「・↑の結果の[0]の内容を入れるList→nameList」
adr1list.Add(srcary(0)) ←「・↑の結果の[1]の内容を入れるList→adr1List」
adr2list.Add(srcary(0)) ←「・↑の結果の[2]の内容を入れるList→adr2List」
Next
ComboBox1.DataSource = namelist ←「5.ComboBox1にnameList、ComboBox2にadr1List、ComboBox2にadr2Listを設定する。」
ComboBox2.DataSource = adr1list
ComboBox3.DataSource = adr2list
投稿日時 - 2008-08-12 17:34:27
0人が「このQ&Aが役に立った」と投票しています
ベストアンサー以外の回答(7件中 1~5件目)
CSVデータに不備はありませんでしょうか?
名前,都道府県,市区町村名 のように1行あたりのデータが
登録されていれば問題ありませんが、たとえばCSVデータの
一部に不備があり名前がないデータがあった場合。
例)北海道,旭川市
srcAry(0) = 北海道
arcAry(1) = 旭川市
srcAry(2) = 存在しない
上記のようにデータが作成されるため、srcAry(2)を
参照しようとするとおっしゃるとおりのエラーが発生
します。
1行読み込んでsplitしているところに何件目のデータ
を処理しているのか、CSVデータの内容はどうなってい
るのか等をダンプしてみてはいかがでしょうか?
投稿日時 - 2008-08-19 16:48:30
ご回答ありがとうございます。
ご指摘頂いたとおりファイルをチェックしてみたところ
ササキ,北海道,札幌市,
スズキ,福岡県,福岡市,
サトウ,愛知県,名古屋市,
ハヤシ,北海道,旭川市,
最後の旭川市の後にEnterで改行されていました。
その改行を消去すると思うとおりに動作するようになりました。
何度も親切にご回答いただきまして、ありがとうございます。
今後も勉強しながら取り組んでいこうと思いますので、どうしても解決出来ない場合はご質問させていただきますので、よろしくお願い致します。
投稿日時 - 2008-08-19 17:16:49
namelist.Add(srcary(0)) ←「・↑の結果の[0]の内容を入れるList→nameList」
adr1list.Add(srcary(0)) ←「・↑の結果の[1]の内容を入れるList→adr1List」
adr2list.Add(srcary(0)) ←「・↑の結果の[2]の内容を入れるList→adr2List」
単純なミスですね。
srcary(0)が全部(0)になってます。
srcaryには
[0]:名前
[1]:都道府県
[2]:市区町村名
と入っているはずですので添え字を変えてあげる必要があります。
namelist.Add(srcary(0))
adr1list.Add(srcary(1))
adr2list.Add(srcary(2))
投稿日時 - 2008-08-12 18:50:31
ご返事が遅くなってしまいました。ご回答ありがとうございます。
ご指摘いただきましたとおり、
namelist.Add(srcary(0))
adr1list.Add(srcary(1))
adr2list.Add(srcary(2))
として、プログラムを実行すると、
「IndexOutOfRangeExceptionは、ハンドルされませんでした」
「インデックスが境界の範囲外です」
という、エラーが出てしまいます。
なんとか自分で解決方法をと思い調べているのですが、解りませんでした。アドバイスいただけますでしょうか。よろしくお願い致します。
投稿日時 - 2008-08-19 10:46:31
SelectedIndexプロパティは選択項目がある場合 0から個数-1までの値になります
3個のアイテムがあるなら 0,1,2と-1がとりうる値です
-1の場合は 選択項目がない状態になります
1-2,2-2,3-2 がそれぞれ 0,1,2の対応になりますよ
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
といった具合にしてください
右辺を ComboBox1.SelectedIndex + 1 してしまうと 0,1,2,3がとりうる値になり 3になってしまうとエラーになると思います
投稿日時 - 2008-08-12 08:45:07
ご回答ありがとうございます。
もしかすると、自分の説明が悪く上手く伝わってないのかと思い、一度整理させていただきます。
現在フォームにcombobox1、combobox2、combobox3、と3つあります。
ササキ,北海道,札幌市,,,,,
スズキ,福岡県,福岡市,,,,,
サトウ,愛知県,名古屋市,,,,,
ハヤシ,北海道,旭川市,,,,,
という形で数百件の顧客データ TextFile1.txt があります。
combobox1で"ササキ"を選択すると、combobox2は"北海道"、combobox3は"札幌市"という形で表示させたいと思ってます。(comboboxは電話番号等もある為、今後増やしていく予定です)
最終的には、combobox2で"北海道"を選択すると、顧客名のところは北海道の方のみを表示させるという所までやりたいと思っています。
自分なりに色々調べていくうちに、テキストファイルの行を読込み、Splitでカンマ区切りで配列をして、それを各comboboxにセットする?という事は素人なりに解ったのですが(これも自信がありませんが)、各comboboxにどうセットしていくのか。という所から行き詰っています。
アドバイスいただきましたとおり
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
としてみましたが、前回同様のエラーが出てしまいました。
別にご回答いただいたproKaseifuさんからは「質問者のソースを見る限りComboBox1以外にデータを設定していないような」というアドバイスもいただきました。combobox2,combobox3にデータを設定するとしたらどういうソースを書いていくといいのでしょうか。何度も大変申し訳ございませんが、よろしくお願い致します。
投稿日時 - 2008-08-12 09:30:57
問題を整理させてください。
やりたいこと:ComboBox1の値が変更されるとTextBox1にComboBox1の中身を表示する。
ComboBox1の中身
[0]:項目1-1
[1]:項目1-2
[2]:項目1-3
[3]:項目1-4
ではないのでしょうか?(連動~のところはとりあえずおいときます、No2さんのソースで間違ってないと思いますが、質問者のソースを見る限りComboBox1以外にデータを設定していないような・・・)
上記内容であれば
TextBox1.Text = ComboBox1.SelectedItem.ToString
で実現可能と思われます。
>次に
>ComboBox2.SelectedIndex = ComboBox1.SelectedItem.ToString
>とすると、下記エラーが出ます。
>String "ササキ" から型 'Integer' への変換は無効です。
数値項目に文字列を入れようとしてエラーとなっています。
投稿日時 - 2008-08-11 17:26:57
ご回答ありがとうございます。
説明が悪く申し訳ありません。一度整理させていただきます。
現在フォームにcombobox1、combobox2、combobox3、と3つあります。
ササキ,北海道,札幌市,,,,,
スズキ,福岡県,福岡市,,,,,
サトウ,愛知県,名古屋市,,,,,
ハヤシ,北海道,旭川市,,,,,
という形で数百件の顧客データ TextFile1.txt があります。
combobox1で"ササキ"を選択すると、combobox2は"北海道"、combobox3は"札幌市"という形で表示させたいと思ってます。(comboboxは電話番号等もある為、今後増やしていく予定です)
最終的には、combobox2で"北海道"を選択すると、顧客名のところは北海道の方のみを表示させるという所までやりたいと思っています。
自分なりに色々調べていくうちに、テキストファイルの行を読込み、Splitでカンマ区切りで配列をして、それを各comboboxにセットする?という事は素人なりに解ったのですが(これも自信がありませんが)、各comboboxにどうセットしていくのか。という所から行き詰っています。
投稿日時 - 2008-08-11 18:00:04
APIとかは調べてみたのでしょうか?
ComboBox1.SelectedItem.ToString
で何が表示されるかみてみましょう。
(ArrayListの中身がクラスオブジェクトとかの場合はこれじゃだめですが)
投稿日時 - 2008-08-11 15:10:19
素人なもので、まず「APIとは?」という所からスタートなんです。
こちらは、頑張って使い方を調べてみようと思います。
ComboBox1.SelectedItem.ToStringはこの使い方でいいのでしょうか。
ComboBox2.text = ComboBox1.SelectedItem.ToString
とすると、ComboBox1と同じ名前が表示されます。
次に
ComboBox2.SelectedIndex = ComboBox1.SelectedItem.ToString
とすると、下記エラーが出ます。
String "ササキ" から型 'Integer' への変換は無効です。
根本的に間違った事をしてましたら、申し訳ございません。よろしくお願い致します。
投稿日時 - 2008-08-11 15:50:54
スポンサーサイト検索
新着
注目ピックアップ
おすすめリンク