列表框显示超出范围,即使它包含的元素多于引发错误的索引

List box showing out of range, even when it contains more elements than the index on which it is throwing error

我只是想将一个列表框的项目移动到另一个列表框。 即使列表框包含元素,我也会收到索引超出范围的错误。 下面是我的代码:

   While lstAccounts.Items.Count <> 0
        For i As Integer = 0 To lstAccounts.Items.Count-1
            lstSelectedAccounts.Items.Add(lstAccounts.Items(i))
            lstAccounts.Items.Remove(lstAccounts.Items(i))
        Next
    End While

最初,lstAccounts 包含 5 个元素。它在 for 循环到前三个元素内部工作正常。但是在 i=3 时抛出错误。但是,为什么会这样! lstAccounts.Items(3) 应该 return 值,因为它最初由 5 个元素组成。 我这是在做什么傻事吗!

迭代 lstAccounts 项目集合时,您需要从 0 计数到 Items.Count -1

此外,您无法在遍历列表时从列表中删除项目 - 我认为这就是它失败的原因。添加到 SelectedAccounts 后尝试删除项目 - 在 For 循环之外。

例如:

            Dim itemsToRemove As New Generic.List(Of ListItem)
            For Each li As ListItem In lstAccounts.Items                    
                    lstSelectedAccounts.Items.Add(li)
                    itemsToRemove.Add(li)                    
            Next
            For Each li As ListItem In itemsToRemove
                lstAccounts.Items.Remove(li)
            Next

基本问题是在循环内,您正在从 lstAccounts 中删除项目,并且您将循环限制设置为 lstAccounts 的计数

For i As Integer = 0 To lstAccounts.Items.Count-1
            lstSelectedAccounts.Items.Add(lstAccounts.Items(i))
            lstAccounts.Items.Remove(lstAccounts.Items(i))

你的循环将循环 4 次

并且当 i=0 意味着第一个循环时,您将从 lstAccounts 中删除 1 个元素 喜欢

 lstAccounts.Items.Remove(lstAccounts.Items(i))

所以当再次循环时,lstAccounts 的计数将比旧的少 1,这意味着第一次计数将为 5,现在为 4,同样,它发生在每次循环中进度,当 i=3 时,您的 lstAccounts 总数将小于 3,并且会显示超出范围异常