从列表框中选择的顺序获取项目

时间:2014-10-21 15:09:39

标签: vb.net winforms listbox

如果用户已选择超过3个项目(仅允许用户删除选择),我想取消选择上次选择的索引。

sender.selectedIndex返回第一个选定的列表框项,而不是最后一个(按时间顺序排列)项。有没有人有任何提示我怎么能做到这一点?

示例(*已选择)

item1
*item2
item3
*item4
item5

如果我选择item3,则sender.selectedIndex包含item2(第一项),sender.selectedItems包含item2,item3,item4,因此我无法判断哪一项是新的。

1 个答案:

答案 0 :(得分:1)

您需要根据需要跟踪和比较您自己的列表与SelectedIndexes更新。显然,LB只是迭代项集合以构建Selecteditems集合,因此它总是与项目的顺序相同。

有点矫枉过正吗?只有当应用程序确实不需要这种级别的细节时。否则,如果你需要它,你需要它。

Private cList As New List(Of Integer)       ' our new Selected Indicies

Private Sub lb_SelectedIndexChanged(sender As Object, 
        e As EventArgs) Handles lb.SelectedIndexChanged

    Dim ndxCol As ListBox.SelectedIndexCollection
    ndxCol = lb.SelectedIndices

    ' add missing ones
    For Each n As Integer In ndxCol
        If cList.Contains(n) = False Then
            cList.Add(n)
        End If
    Next

    ' remove old ones
    For n As Integer = cList.Count - 1 To 0 Step -1
        If ndxCol.Contains(cList(n)) = False Then
            cList.Remove(cList(n))
        End If
    Next

End Sub