我有2个列表框和一个按钮。每当用户选择lstAvail中的项目并按下按钮时,所选项目将被添加到lstSelected。
如果循环以1为步骤递减,则以下代码可以正常工作。
Private Sub Form_Load()
Dim intX As Integer
For intX = 0 To 5
lstAvail.AddItem "Item #" & Format$(intX, "000")
Next
End Sub
Private Sub Command1_Click()
Dim intListX As Integer
For intListX = lstAvail.ListCount - 1 To 0 Step -1
If (lstAvail.Selected(intListX)) Then
lstSelected.AddItem lstAvail.List(intListX)
lstAvail.RemoveItem intListX
End If
Next
End Sub
但是当我从0增加到(lstAvail.ListCount -1)时,为什么它不起作用,如下所示?该代码会引发运行时错误"无效的属性数组索引"。
Private Sub Command1_Click()
Dim intListX As Integer
For intListX = 0 To lstAvail.ListCount - 1
If (lstAvail.Selected(intListX)) Then
lstSelected.AddItem lstAvail.List(intListX)
lstAvail.RemoveItem intListX
End If
Next
End Sub
答案 0 :(得分:4)
这不起作用的原因是因为您要从< lstAvail>中删除项目,但是您仍然从0开始递增,就像列表仍保持原样一样。
lstAvail中的项目
假设您选择列表中的第三项(ListIndex = 2),然后单击按钮,触发Command1_Click()。您将增加intListX,直到它等于5.以下是For循环的跟踪:
intListX:0
lstAvail.Selected(intListX):False
lstAvail:
intListX:1
lstAvail.Selected(intListX):False
lstAvail:
intListX:2
lstAvail.Selected(intListX):True
!!删除“Item 002”!!
lstAvail:
intListX:3
lstAvail.Selected(intListX):False
lstAvail:
intListX:4
lstAvail.Selected(intListX):False
lstAvail:
intListX:5
lstAvail.Selected(intListX):< !! Error !!>
此处没有带索引5的项目。
intListX:5
lstAvail.Selected(intListX):False
lstAvail:
intListX:4
lstAvail.Selected(intListX):False
lstAvail:
intListX:3
lstAvail.Selected(intListX):False
lstAvail:
intListX:2
lstAvail.Selected(intListX):True
!!删除“Item 002”!!
lstAvail:
intListX:1
lstAvail.Selected(intListX):False
lstAvail:
intListX:0
lstAvail.Selected(intListX):False
lstAvail: