| | タイトル | : '-1' の InvalidArgument=Value は 'Index' に対して有効ではありません |  | 記事No | : 13382 |  | 投稿日 | : 2009/01/29(Thu) 01:11 |  | 投稿者 | : 桃羽 | 
 はじめましてこんばんは 桃羽と申します
 vbは専門学校の授業でちろりとやった程度です
 visual basic2005でプログラムを作っています
 
 
 手芸材料の単価や材料名を登録、編集するプログラムです
 
 form4で全材料の名前、単価を別々のリストボックスの同じインデックスに表示
 編集ボタンを押すとform6が出て単価、材料名が編集でき
 編集完了ボタンクリックで材料名や単価をform6で編集した内容に沿ってform4の表示も変わるというものです
 材料名をキーに利用するため、登録する際も材料名は重複しないようになっています
 
 
 エラー内容↓
 'System.ArgumentOutOfRangeException' の初回例外が System.Windows.Forms.dll で発生しました。
 '-1' の InvalidArgument=Value は 'Index' に対して有効ではありません
 
 
 index = Form4.ListBox1.Items.IndexOf(goods)
 If TextBox1.Text <> goods Then
 Form4.ListBox2.Items.Insert(index, TextBox2.Text)
 Form4.ListBox2.Items.RemoveAt((index + 1))
 Form4.ListBox1.Items.Insert(index, TextBox1.Text)
 Form4.ListBox1.Items.RemoveAt(index + 1)
 Else
 Form4.ListBox2.Items.Insert(index, TextBox2.Text)
 Form4.ListBox2.Items.RemoveAt((index + 1))
 End If
 
 goods = TextBox1.Text
 MsgBox("編集しました", , "編集")
 
 
 まずform6を開く際form4から受け取った材料名を変数goodsに保存します
 
 材料名(textbox1)がgoodsのまま編集されていなければ、
 form4のlistbox2(単価一覧)の、元々その単価が表示されていた部分に新しい単価を登録
 その後、1つずれた元の単価をリストから削除しています。これがelseの部分
 
 問題が出るのはif文に入ったときです
 素材名が既に保存されている他の素材名と重複していないのを確認した上で
 まずelseのとき同様、単価を登録、ずれた単価を削除した後、
 同じ要領でlistbox1の元々その素材名があった位置に新しい素材名を追加し、ずれこんだ古い素材名を削除します。
 ⇒Form4.ListBox1.Items.RemoveAt(index + 1)
 この行を記入すると最初に書いたエラーが出ます。
 RemoveAtではなく、Removeで直接goodsに保存された元の素材名を削除しようとしても同じです
 何故、ずれ込んだ素材名を削除できないのかがわかりません。
 
 上手く書けなくて申し訳ありません
 どなたか、エラー回避の為何かアドバイスいただけると助かります
 よろしくお願い致します。
 
 |