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

このQ&Aのポイント
  • VB2008の顧客検索プログラムでcomboboxを連動させた際に、'0' の InvalidArgument=Value は 'SelectedIndex' に対して有効ではありません。 パラメータ名: SelectedIndexというエラーが出てしまい解決方法を求めています。
  • 現在のソースコードを使ってcombobox1で選択した値に応じてcombobox2とcombobox3に表示したい値を設定していますが、エラーが発生してしまいます。どのように解決すればよいでしょうか?
  • VB2008の顧客検索プログラムでcomboboxを連動させようとしていますが、'0' の InvalidArgument=Value は 'SelectedIndex' に対して有効ではありません。 パラメータ名: SelectedIndexというエラーが出てしまいます。解決方法を教えてください。
回答を見る
  • ベストアンサー

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

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

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

デバッグの基本は何が原因でエラーとなるか、どこまでは正常に動いているか、を付きとめる事です。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

lobin_2008
質問者

お礼

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

関連するQ&A

  • ComboBoxについて

    ComboBoxのアイテムリストからアイテムを選んだら 選んだアイテムに対応した別の文字列 をComboboxに表示したいと思います。 動き的には Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  ComboBox1.Text = ""  ComboBox1.Items.Add("000")  ComboBox1.Items.Add("001")  ComboBox2.Text = ""  ComboBox2.Items.Add("0個目")  ComboBox2.Items.Add("1個目")  ComboBox2.Visible = False End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged  Select Case ComboBox1.SelectedIndex   Case 0    ComboBox1.Visible = False    ComboBox2.Visible = True    ComboBox2.SelectedIndex = 0   Case 1    ComboBox1.Visible = False    ComboBox2.Visible = True    ComboBox2.SelectedIndex = 1  End Select End Sub Private Sub ComboBox2_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox2.GotFocus  ComboBox1.Visible = True  ComboBox1.DroppedDown = True  ComboBox2.Visible = False End Sub こんな感じで、ComboBoxを二つ使えば実現できるのですが一つだけでも実現できる方法が ありましたら、教えてくださいませ。

  • 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に表示させたいのですが、上手くいきません。長文で解りにくい点があるかと思いますが、よろしくお願い致します。

  • VB2010 ComboBoxの使い方について、教えてください。

    VB2010 ComboBoxの使い方について、教えてください。 From[デザイン]にて、ComboBoxを配置し、タスクの「項目編集・・・」で項目を設定しました。 項目の内容は、以下の四つ。 AAA BBB CCC DDD イベントが発生すると Private Sub ComboBox_SelectedIndexChanged(....)に入り、この中で Dim index As Integer index = Me.ComboBoxFU.SelectedIndex とすれば、indexの値が変わると踏んでいましたが、値が変わりません。 Webで調べてみましたが、皆ソース上での設定しか書いていないようです。 初期設定での設定方法を教えてください。 以上、よろしくお願いします。

  • プルダウンとComboboxの連動するには?

    これでプルダウンの選択はできるようになりましたがCombobox1で選んだやつを反映させるにはどうしたらいいでしょうか。 わかる方がいましたら教えていただけませんでしょうか。 Microsoft Visual Basic 2005 WebBrowser1を使って表示させています。 Combobox1の中身 4日 5日 6日 ' 最初の ComboBox を取得する     Dim firstCombo As HtmlElement = Me.WebBrowser1.Document.GetElementById("ct0")     ' ComboBox の値を設定する     firstCombo.SetAttribute("selectedindex", "0")

  • Comboboxを連動するには?。

    はじめまして、どなたか教えてくれませんか。 Microsoft Visual Basic 2005を使ってCombobox1で選らんだ項目を WebBrowser1で表示させたい。 URLをCombobox1に表示させて表示はできますが項目を変えて表示するやり方がわかりまでいたのでおしえてくれませんか。 よろしくお願いします。 Combobox1で表示させたい項目 ヤフー グーグル goo Navigateで誘導したいURL http://www.yahoo.co.jp/ http://www.google.com/ http://www.goo.ne.jp/ Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged WebBrowser1.Navigate(ComboBox1.Text) End Sub

  • VB2008 comboboxの内容をSelectCaseで使いたい

    VB2008 comboboxの内容をSelectCaseで使いたい いつもお世話になってます。 初めてComboboxを使っています。 リストには 「メロンパン」 「コロッケパン」 「ハンバーガー」 と入っていて、 デバックしそれぞれを選択すれば、無事に指定欄に表示されるようにまではなりました。 ここでストップしてしまいまして、 Selectcase(今週習った)で、 case 1 (メロンパンは120円なので) en=個数x120 case 2 … というようにしたいのですが、 "Select Case ○○"の○○を何にすればいいのか分からないのと、 caseのあとの数字は(リストの上から)0,1,2というように聞いた気がしたのですがそれでよいのかどうか。 見ていただけないでしょうか。 未完成のぼろぼろですが、コードをおのせします。 Public Class Form1 Dim cm, a As String Dim kosu, en As Integer Private Sub ShapeComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ShapeComboBox.SelectedIndexChanged txtKaimono.Text = ShapeComboBox.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click kosu = TextBox1.Text Select Case ShapeComboBox Case 0 en = kosu * 120 Case 1 en = kosu * 180 Case 2 End Select End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Application.Exit() End Sub End Class

  • ComboBoxのItem追加

    VB.NETでの開発初心者です。 ComboBoxのItem追加について、1行づつ追加していくのは理解できているのですが、HTMLでのListBox「OPTIONS設定」の様にArrayListにて一括追加する方法がわかりません。 ご存知の方、よろしくお願いします。  <1行づつ追加>  Me.ComboBox1.Items.Clear()  Me.ComboBox1.Items.Add(New ComboItems(Key値, 表示値))    ※ComboItemsクラスは、別途作成 <一括追加>  Dim comboArray As New ArrayList  comboArray.Add(New ComboItems(Key値, 表示値))  Me.ComboBox1.Items.???(comboArray) ← ここがわからない  

  • Comboboxの選択値をパラメータにしたい

    VS2010でComboboxを作成し、 選択されたパラメータを別のファンクションで利用したい。 プログラムの内容はPC上で認識されているCOMポートを Comboboxにリストアップ、 ユーザが選択したCOMポートを利用するような流れです。 現状: Private Sub GetSerialPortNames() With SP_Select .Text = "None" .Items.Clear() For Each sp As String In My.Computer.Ports.SerialPortNames .Items.Add(sp) Next .EndUpdate() .SelectedIndex = 0 End With End Sub 上記コードでデフォルトはNoneと表示され、 COMポートデバイスが接続された際に、 自動的にComboboxにポートの名前が表示されます。 さらに選択したCOMポートを変数に代入して使うには、 どうしたらいいでしょうか。(どう書いたらいいでしょうか) 初歩的な質問ですが、どなたが教えて下さい。

  • comboxのリストをファイルから読み込む方法

    最近始めたばかりなのですが、よろしくお願い致します。 フォーム1にコンボボックス1があります。 フォーム1をロードした際に、コンボボックス1にTextFile1.txtのリストを表示したいのですが、上手くいきません。 TextFile1.txtは、名前,住所,電話番号,,,,というように区切られていて、コンボボックスには名前だけを表示させたいと思います。 使用しているソフトは、VisualBasic2008ExpressEditionで、WinXPを使っています。 一応下記が現状のコードです。自分ではヘルプ・入門書などを見て書いてみましたが、行き詰ってしまいました。よろしくお願い致します。 Imports System.IO -------------------------------- Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim Reader As New IO.StreamReader("C:\Documents and Settings\ob\デスクトップ\WindowsApplication3\WindowsApplication3\TextFile1.txt") Dim items() As String   Dim line As String = Reader.ReadLine ComboBox1.Text = "名前一覧" '初期表示 ComboBox1.Items.Add(Reader.ReadLine()) End Sub End Class

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

    開発環境:Visual Basic 2005 DataGridViewのDataGridViewTextBoxColumnの1行目をコンボボックスにして、 そのコンボボックスのドロップダウン幅を100に設定しようとしていますが、うまくいきません。 DataGridViewをフォームに貼り付け、以下のプログラムを実行すると、幅が120くらいになってしまいます。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load DataGridView1.Columns.Clear() DataGridView1.AllowUserToAddRows = False Dim TextColumn As New DataGridViewTextBoxColumn TextColumn.Name = "Name" TextColumn.Width = 100 Dim ComboColumn As New DataGridViewComboBoxColumn ComboColumn.Name = "Type" Dim List() As String = {"Type A", "Type B", "Type O"} ComboColumn.DataSource = List ComboColumn.DropDownWidth = 100 DataGridView1.Columns.Add(TextColumn) DataGridView1.Columns.Add(ComboColumn) For i As Integer = 1 To 5 DataGridView1.Rows.Add() Next Dim ComboCell As New DataGridViewComboBoxCell Dim NameList() As String = {"Name A", "Name B", "Name C"} ComboCell.DataSource = NameList ComboCell.DropDownWidth = 100 DataGridView1.Rows(0).Cells(0) = ComboCell End Sub どこが問題なのかどなたかご教授いただけると助かります。どうぞよろしくお願い致します。