如果用户已选择超过3个项目(仅允许用户删除选择),我想取消选择上次选择的索引。
sender.selectedIndex
返回第一个选定的列表框项,而不是最后一个(按时间顺序排列)项。有没有人有任何提示我怎么能做到这一点?
示例(*已选择)
item1
*item2
item3
*item4
item5
如果我选择item3,则sender.selectedIndex
包含item2(第一项),sender.selectedItems
包含item2,item3,item4,因此我无法判断哪一项是新的。
答案 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