2012-01-23 16 views
3

WebページにlistBoxの選択された項目を削除するテキストがあり、次の項目に反復処理するif文があります。C#:ArgumentOutOfRangeExceptionがユーザーコードによって処理されていません

私はいくつかのコードを作ったが、私はそれを試したとき、私は入れません:

ArgumentOutOfRangeException was unhandled by usercode

これは、より詳細に誤りである:

{"InvalidArgument=Value of '1' is not valid for 'SelectedIndex'.\r\nParameter name: SelectedIndex"}

これは私のコードです:

 listBox1.Items.Remove(listBox1.SelectedItem); 
     listBox1.SelectedIndex = + 1; 

編集:

すべての助けを借りてくれてありがとう!アイテムを削除せず、繰り返し実行するだけで問題は解決しました。

+1

リストボックスにはいくつのアイテムがありますか? SelectedIndexを1に設定する理由は何ですか?最後のアイテムを削除する場合は、1に設定しないでください。少なくとも2つのアイテムが残っている必要があります。 – slfan

+2

'listBox1.SelectedIndex = + 1'は' listBox1.SelectedIndex = 1'と同じです。 –

+0

@slfan私は私のリストの2つの項目でそれをテストしていました – user1017524

答えて

0

確かに知るには、完全なコードサンプル(ifステートメントを参照)が必要です。しかし、選択した項目をリストボックスにないインデックスに設定することはかなり明白です。

selectedIndexは0ベースであり、ベースではないことに注意してください。

MSDNはあなたのエラーの言う:

ArgumentOutOfRangeException: The assigned value is less than -1 or greater than or equal to the item count.

エラーはあなたが1にSelectedIndexを設定するとき、それが起こっていることを示しているので、私はあなただけのリストボックス(インデックス= 0)で、単一のアイテムを持っていると仮定していますこのコードが呼び出されたとき。

+0

彼はインデックスをインクリメントしません、彼はちょうどそれを1に設定しています。しかし、それは範囲外です – slfan

+0

@ JohnFx私は実際にリストボックスに2つの項目を持っています – user1017524

+0

しかし、最高のインデックスは0 – JohnFx

0

インデックスは0から始まるため、SelectedIndexを1に設定すると、の2番目の値がリスト内で選択されます。あなたが値の1つを除いてすべてを削除して、SelectedIndexを第2のものに設定しようとしているとき、それが失敗していると思います。

+0

です。選択したアイテムを削除するコードを削除し、次のアイテムに繰り返し処理すると、同じエラーが表示されます。 – user1017524

+0

繰り返し処理しようとしていると、構文が間違っていると思います。 'listBox1.SelectedIndex + = 1;'を意味しますか?それは効果的です 'listBox1.SelectedIndex = listBox1.SelectedIndex + 1;' –

-15

listBoxの最初の項目を選択しますか?その場合、コードは次のようになります。

if(listBox1.Items.Count > 0) listBox1.SelectedIndex = 0; 
+0

私は2つの項目でそれをテストしていましたが、最初の項目に行くために必要な項目はもうありません – user1017524

2

あなたが選択しようとしている項目が存在するかどうかをテストする必要があります。

int index = listBox1.SelectedIndex; 
listBox1.Items.RemoveAt(index); 
If (index < listBox1.Items.Count) { 
    listBox1.SelectedIndex = index; 
} 

EDIT:あなたは、ループ内の項目を削除したい場合は項目を削除すると、以下の項目の位置を変更するので、最後に開始することをお勧めします。上にループすると、アイテムを削除するたびにアイテムがスキップされます。

for (int i = listBox1.Items.Count - 1; i >= 0; i--) { 
    if (listBox1.Items[i].ToString() == "whatever") { 
     listBox1.Items.RemoveAt(i); 
    } 
} 
+0

これはOPの方がはるかですが、コード選択した項目が削除された項目の上か下かによって、ここでは機能が異なります。削除されたアイテムが選択されたアイテムの前にある場合、インデックスを同じに保つと次のアイテムが選択され、そうでない場合、OPはおそらく意図したとおりに機能します。 – Servy

+0

また、エラー状態をどのように処理するか考えてみたいと思うでしょう。何も選択しませんか?前の選択?最後の項目ですか?最初の項目は? – Servy

+0

OPは反復について話します。これは誤解を招く可能性があります。彼はループをしたくないかもしれませんが、代わりに次の項目を選択するだけです。この場合、選択する項目のインデックスは、削除された項目のインデックスと同じままになります。次の項目が削除された項目に代わるためです。 –

関連する問題