2014-10-21 4 views
0

사용자가 이미 3 개 이상의 항목을 선택했다면 (사용자가 선택 항목 만 제거 할 수 있도록 허용) 마지막으로 선택한 색인의 선택을 취소하고 싶습니다.목록에서 선택한 항목 가져 오기

sender.selectedIndex은 첫 번째 선택된 목록 상자 항목을 반환하고 마지막 (시간순) 항목은 반환하지 않습니다. 아무도 내가 어떻게 이것을 얻을 수있는 조언을 가지고 있습니까? 내가 항목 3을 선택하면

예 (* 선택)

item1 
*item2 
item3 
*item4 
item5 

sender.selectedIndex는 항목 2 (첫 번째 항목) 및 sender.selectedItems는, 항목 3가, item4 그래서 난 새로운 어느 말할 수없는 항목 2가 포함되어 포함되어 있습니다.

+0

listBOX (질문 텍스트) 또는 listVIEW (제목) 매우 큰 차이 – Plutonix

+0

대단히 죄송합니다. 목록 상자를 의미하지만 최대 3 개의 선택된 항목을 지정할 수있는 경우 listview도 고려합니다. – Lorof

+0

selectedItems 컬렉션은 목록 상자에 표시된 순서대로 선택 항목을 저장합니다. 마지막으로 선택한 항목을 (시간별로) 가져오고 싶습니다. 나는 그 질문을 갱신 할 것이다. – Lorof

답변

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 
+0

대단히 감사합니다! – Lorof

관련 문제