我有两个列表框,我正在尝试将列表1中的项目添加到列表2,然后能够一次从列表2中删除多个项目。请注意,列表1保持停滞(这应该是这样的。)
我有正确的添加项目:
'Add the selected items to List 2
Dim i As Integer
If lst1.ItemsSelected.Count > 0 Then
i = 0
While i < lst1.ListCount
If lst1.Selected(i) Then
lst2.AddItem (lst1.ItemData(i) & ";" & lst1.Column(1, i) & ";")
lst1.Selected(i) = False
End If
i = i + 1
Wend
End If
但是,当我尝试以类似的方式从列表2中删除项目时,它只会将第一个选定的项目识别为已选择,并跳过我选择的其他项目。这就是问题。这是我的代码:
'Remove the selected items from List 2
Dim i As Integer
If lst2.ItemsSelected.Count > 0 Then
i = lst2.ListCount - 1
While i >= 0
If lst2.Selected(i) Then
lst2.RemoveItem (i)
lst2.Selected(i) = False
End If
i = i - 1
Wend
End If
如何才能使其正常工作?
答案 0 :(得分:8)
据我所知,只要删除一个项目,所有项目都会被取消选中,所以:
Dim itm As Variant
Dim srem As String
Dim asrem As Variant
For Each itm In lst2.ItemsSelected
srem = srem & "," & itm
Next
asrem = Split(Mid(srem, 2), ",")
For i = UBound(asrem) To 0 Step -1
lst2.RemoveItem lst2.ItemData(asrem(i))
Next
另请注意,这是Access,您正在处理值列表,因此行源文本上的替换也可以。
答案 1 :(得分:7)
尝试使用for / next循环而不是While?
像PPT / XLS这样的东西在我认为的Access中应该类似。
For i = lst2.ListCount - 1 to 0 step -1
If lst2.Selected(i) = True Then
lst2.RemoveItem(i)
End If
Next
答案 2 :(得分:0)
与@Fionnuala相同的概念,但我使用的集合通常更灵活:
Dim i As Integer
Dim listColl As Collection
Dim Item As Variant
Set listColl = New Collection
With Me.listAvailable
' Add Selected Items to Collection (MultiSelect Listbox)
For i = 0 To .ListCount - 1
If .Selected(i) Then
listColl.Add .ItemData(i)
End If
Next i
End With
For Each Item In listColl
Me.listSelected.AddItem Item
Me.listAvailable.RemoveItem Item
Next Item
答案 3 :(得分:0)
我使用了此代码,效果很好
Dim ArraySlctd() As Variant 'this Arry is to save what row is selected because when remove any row all selected are getting false
ReDim ArraySlctd(0 To Me.List1.ListCount - 1)
For lp = 0 To Me.List1.ListCount - 1 '
ArraySlctd(lp) = Me.List1.Selected(lp) 'work in the same range as the selected property
Next lp
现在简单易用
For lp = 0 To Me.List1.ListCount - 1
If ArraySlctd(lp) = True Then
'Remove Or Change(by remove and AddIten with the same Index)
End If
Next lp