为什么我得到运行时错误“无效的属性数组索引”?

时间:2012-07-24 05:01:51

标签: vb6 listbox

我有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

1 个答案:

答案 0 :(得分:4)

转发圈

这不起作用的原因是因为您要从< lstAvail>中删除项目,但是您仍然从0开始递增,就像列表仍保持原样一样。

lstAvail中的项目

  • “项目000”
  • “Item 001”
  • “Item 002”
  • “Item 003”
  • “Item 004”
  • “Item 005”

假设您选择列表中的第三项(ListIndex = 2),然后单击按钮,触发Command1_Click()。您将增加intListX,直到它等于5.以下是For循环的跟踪:


intListX:0

lstAvail.Selected(intListX):False

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 002”
  • “Item 003”
  • “Item 004”
  • “Item 005”

intListX:1

lstAvail.Selected(intListX):False

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 002”
  • “Item 003”
  • “Item 004”
  • “Item 005”

intListX:2

lstAvail.Selected(intListX):True

!!删除“Item 002”!!

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 003”
  • “Item 004”
  • “Item 005”

intListX:3

lstAvail.Selected(intListX):False

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 003”
  • “Item 004”
  • “Item 005”

intListX:4

lstAvail.Selected(intListX):False

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 003”
  • “Item 004”
  • “Item 005”

intListX:5

lstAvail.Selected(intListX):< !! Error !!>

此处没有带索引5的项目。

反转循环

intListX:5

lstAvail.Selected(intListX):False

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 002”
  • “Item 003”
  • “Item 004”
  • “Item 005”

intListX:4

lstAvail.Selected(intListX):False

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 002”
  • “Item 003”
  • “Item 004”
  • “Item 005”

intListX:3

lstAvail.Selected(intListX):False

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 002”
  • “Item 003”
  • “Item 004”
  • “Item 005”

intListX:2

lstAvail.Selected(intListX):True

!!删除“Item 002”!!

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 003”
  • “Item 004”
  • “Item 005”

intListX:1

lstAvail.Selected(intListX):False

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 003”
  • “Item 004”
  • “Item 005”

intListX:0

lstAvail.Selected(intListX):False

lstAvail:

  • “项目000”
  • “Item 001”
  • “Item 003”
  • “Item 004”
  • “Item 005”