从列表框中删除所选项时出错

时间:2015-05-28 14:52:59

标签: vb.net visual-studio-2012 listbox

情景

我有2个列表框1用于订单,另一个用于总成本。为了使用户使用我使用以下代码链接所选项目。

Dim Selecting As Boolean = False
Private Sub lstOrders_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstOrders.SelectedIndexChanged
    If Not Selecting Then
        Selecting = True
        lstTotalsEachOrder.SetSelected(lstOrders.SelectedIndex, True)
        Selecting = False
    End If
End Sub
Private Sub lstTotalsEachOrder_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstTotalsEachOrder.SelectedIndexChanged
    If Not Selecting Then
        Selecting = True
        lstOrders.SetSelected(lstTotalsEachOrder.SelectedIndex, True)
        Selecting = False
    End If
End Sub

当我尝试删除项目时出现问题,请使用以下代码。

        lstOrders.Items.RemoveAt(lstOrders.Items.Count - 1)
        lstTotalsEachOrder.Items.RemoveAt(lstTotalsEachOrder.Items.Count - 1)

问题

它可以正常删除项目,但是当它到达所选项目时会抛出错误:InvalidArgument =' -1'不适用于' index'。

我尝试使用以下代码修复此问题

lstOrders.ClearSelected()
lstTotalsEachOrder.ClearSelected()

但我仍然得到错误。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

您确定所选项目存在问题吗? 在您尝试从空ListBox中删除项目时,我发现您收到此异常。

使用简单条件确保ListBox实际上包含项目:

If lstOrders.Items.Count > 0 Then 
    lstOrders.Items.RemoveAt(lstOrders.Items.Count - 1)
End If
If lstTotalsEachOrder.Items.Count > 0 Then 
    lstTotalsEachOrder.Items.RemoveAt(lstTotalsEachOrder.Items.Count - 1)
End If

当然,你可以将它全部包装在这样的子中:

Sub RemoveLastItem(byVal lst as ListBox)
    If lst.Items.Count > 0 Then 
        lst.Items.RemoveAt(lst.Items.Count - 1)
    End if
End Sub

然后只需从您的代码中调用此子代码:

RemoveLastItem(lstOrders)
RemoveLastItem(lstTotalsEachOrder)

答案 1 :(得分:0)

正如您的错误消息所示:

  

InvalidArgument ='-1'的值对'index'无效。

表示您正在尝试删除ListItem @ -1索引。这个系列中没有。我希望只有当您在列表框为空时尝试删除某些项目时才会发生这种情况(例如,lstOrders.Items.Count=0

因此lstOrders.Items.RemoveAt(lstOrders.Items.Count - 1)导致删除项目@ -1th索引。

  

而且你必须注意到你的代码总是会删除最后一个代码   列表框中的项目。

我的建议: 您可以通过使用上述建议来避免这种情况,或者简单地说,您可以使用[SelectedIndex][1]的{​​{1}}属性来查找和删除所选值。

答案 2 :(得分:0)

我发现问题出现了,因为代码中存在一些不匹配。错误是在以下代码中引发的

 Dim Selecting As Boolean = False
Private Sub lstOrders_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstOrders.SelectedIndexChanged
    If Not Selecting Then
        Selecting = True
        lstTotalsEachOrder.SetSelected(lstOrders.SelectedIndex, True)
        Selecting = False
    End If
End Sub
Private Sub lstTotalsEachOrder_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lstTotalsEachOrder.SelectedIndexChanged
    If Not Selecting Then
        Selecting = True
        lstOrders.SetSelected(lstTotalsEachOrder.SelectedIndex, True)
        Selecting = False
    End If
End Sub

所以我虽然如果我试图取消选择时间然后删除该项目就没事了所以我在删除项目之前写了这个

lstOrders.ClearSelected()
lstTotalsEachOrder.ClearSelected()

但仍然发生错误,所以我将以下代码附加到按钮,这也是触发错误。所以我通过执行以下操作来解决这个问题,

    Selecting = True

    lstOrders.ClearSelected()
    lstTotalsEachOrder.ClearSelected()

    Selecting = False

这允许我取消选择项目并将其从列表框中删除。