在VB.Net ASP.Net Webform中获取多选ListBox的错误

时间:2016-01-21 16:15:11

标签: asp.net vb.net webforms outofrangeexception

我有一个webform,它有两个多选ListBox和一个按钮。该按钮将所选项目从一个ListBox移动到另一个ListBox,同时检查重复项。不幸的是,我在lstEmployees.Items(i).Selected的循环的最后一次迭代中得到了一个超出范围的异常。

我意识到发生了什么,当我删除一个项目(lstEmployees.Items.Remove(li))时,它会更改计数,然后最终抛出错误。有没有办法可以解决这种情况?

If Not lstEmployees.SelectedItem Is Nothing Then
    For i As Integer = 0 To lstEmployees.Items.Count - 1
        If lstEmployees.Items(i).Selected = True Then
             li.Text = lstEmployees.Items(i).Text
             li.Value = lstEmployees.Items(i).Value
             If Not lstSelected.Items.Contains(li) Then
                  lstEmployees.Items.Remove(li)
                  lstSelected.Items.Add(li)
             End If
         End If
     Next
End If

1 个答案:

答案 0 :(得分:1)

当您循环遍历项目集合并从该集合中删除项目时,集合中的项目计数会发生变化,并且您退出for循环的检查会失败(当您删除项目时也不会考虑(例如在索引5处) )索引6处的项目滑入第5位并跳过该元素

修复很简单。以相反的顺序循环

If Not lstEmployees.SelectedItem Is Nothing Then
    For i As Integer = lstEmployees.Items.Count - 1 To 0 Step -1
       ....
    Next
End If
相关问题