こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VB2008 comboboxを連動させた際のエラー

先日より取り組んでいる顧客検索プログラムですが、combobox1でササキを選ぶとcombobox2には北海道、combobox3には札幌市と表示させたいと思います。先日もアドバイスをいただきそれを参考にすすめていますが、「'0' の InvalidArgument=Value は 'SelectedIndex' に対して有効ではありません。 パラメータ名: SelectedIndex」というエラーが出てしまいどうしても解決出来ません。このエラーの後さらにデバッグすると思ったとおりに動作するのですが、エラーを解決するにはどう対処すると良いのでしょうか?下記が現在のソースとなります。どうかアドバイスをお願い致します。

ササキ,北海道,札幌市,
スズキ,東京都,あきる野市,
サトウ,愛知県,名古屋市,
ハヤシ,北海道,旭川市,
が TextFile1.txtです。

Imports System.IO
------------
Public Class Form1
Private Sub Form1_Load(省略~
Dim fn As String = "C:\TextFile1.txt"
Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default)
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)

Dim srcary() As String
Dim i As Integer
For i = LBound(dline) To UBound(dline)
srcary = Split(dline(i), ",")
namelist.Add(srcary(0))
adr1list.Add(srcary(1))
adr2list.Add(srcary(2))
Next
ComboBox1.DataSource = namelist
ComboBox1.SelectedIndex = -1
ComboBox1.Text = "名前"

ComboBox2.DataSource = adr1list
ComboBox2.SelectedIndex = -1
ComboBox2.Text = "住所1"

ComboBox3.DataSource = adr2list
ComboBox3.SelectedIndex = -1
ComboBox3.Text = "住所2"

End Sub
-------------
Private Sub ComboBox1_SelectedIndexChanged(省略~
If ComboBox1.SelectedIndex > -1 Then
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
Else
ComboBox2.Text = ""
End If
End Sub

投稿日時 - 2008-08-20 13:08:52

QNo.4264697

困ってます

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

デバッグの基本は何が原因でエラーとなるか、どこまでは正常に動いているか、を付きとめる事です。1行ずつブレークポイントを設定してステップ実行していけば、理由が判るようになっていきます。

下記行が
ComboBox1.DataSource = namelist
実行された後、
Private Sub ComboBox1_SelectedIndexChanged(省略~
この↑イベントが実行され、結果としてエラーになっています。
エラー行は↓ですね。
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
つまり、ComboBox2には何も選択肢が設定されていないのに、SelectedIndex = 0 を指定しようとした為に発生しているのです。
このことから、ComboBox1_SelectedIndexChanged イベントは、選択肢を追加しようとする際にも走る事が判りますね。

対処方法としては、フラグを用意して、ComboBox への選択肢初期設定中は、イベント内の処理を無視することです。たとえば次のような感じになります。

Public Class Form1
Dim bFormLoad As Boolean = True '■追加

Private Sub Form1_Load(省略~
(各処理)
bFormLoad = False '■Form1_Load 内の最後に追加
End Sub

Private Sub ComboBox1_SelectedIndexChanged(省略~
If bFormLoad Then Return '■追加
If ComboBox1.SelectedIndex > -1 Then
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
Else
ComboBox2.Text = ""
End If
End Sub

投稿日時 - 2008-08-20 13:39:36

お礼

早速のご回答ありがとうございます。
上記内容にて対処することが出来ました。
どうもありがとうございます。

投稿日時 - 2008-08-20 15:09:44

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問