2012-01-23 51 views
3

我有一個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.至少還有兩個項目。 – slfan

+2

'listBox1.SelectedIndex = + 1'與做'listBox1.SelectedIndex = 1'相同。 –

+0

@slfan我正在測試它在我的列表中的兩個項目 – user1017524

回答

0

我得看完整的代碼示例(用if語句)才能確定。但是很明顯,您將所選項目設置爲不在列表框中的索引。

要小心,selectedIndex是零基礎,不是一個基礎。

MSDN說,你的錯誤:

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

由於錯誤表明它是當你的SelectedIndex設置爲1,我假設你只需要在列表框中的單個項目發生(指數= 0)當這個代碼被調用時。

+0

他不增加指標,他只是將它設置爲1,但是,是的,它的範圍 – slfan

+0

@JohnFx之外其實,我在ListBox中 – user1017524

+0

兩個項目,但你在該行之前,除去其中的一個,這意味着指數最高的是0 – JohnFx

0

由於索引是基於0的,因此將SelectedIndex設置爲1即可選擇列表中的第二個值。我猜這是失敗的,當你刪除除了一個值之外的所有值,並試圖將SelectedIndex設置爲第二個值。

+0

當我刪除代碼刪除選定的項目,並保持一個向下迭代到下一個項目我仍然得到同樣的錯誤 – user1017524

+0

如果你想重複我認爲你有語法錯誤。你的意思是'listBox1.SelectedIndex + = 1;'?這實際上是'listBox1.SelectedIndex = listBox1.SelectedIndex + 1;' –

-15

是否要選擇listBox中的第一項?如果是這樣的代碼將是:

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

我有兩個項目的測試,但會有更多的項目我不需要它去的第一個項目 – user1017524

2

你必須測試,如果你試圖選擇的項目acutally存在。

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

編輯:如果你想在一個循環中刪除項目,這是一個好主意,開始在年底,因爲刪除項目更改下列項目的位置。向上循環會使您每次移除項目時都跳過一個項目。

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討論迭代。這可能是誤導。他可能不想完成一個循環,而只需選擇下一個項目。在這種情況下,要選擇的項目的索引將保持與已移除項目的索引相同,因爲下一個項目將取代已移除的項目。 –

相關問題