一个很短的VB代码中的一个小疑问,急啊!

来源:百度知道 编辑:UC知道 时间:2024/06/15 17:14:38
Private Sub Command2_Click()
For i = 0 To List1.ListCount - 1
List2.AddItem List1.List(i)
Next
List1.Clear
End Sub
他的意思很简单,我就不解释了.
我要问的是要实现上述代码的功能用下面这个代码为什么不行,程序会出错:
Private Sub Command2_Click()
For i = 0 To List1.ListCount - 1
List1.RemoveItem i
List2.AddItem List1.List(i)
Next
End Sub
谢谢!

因为你先把它删掉了,然后却又要引用它,所以出问题,改成下面这个样子就可以了:
Private Sub Command2_Click()
For i = List1.ListCount - 1 To 0 Step -1 '先用后删、从大往小删,list1有变化但已经不影响程序了;从小往大删,大的又会变成小的, 程序还是会出问题。
List2.AddItem List1.List(i)
List1.RemoveItem i
Next
End Sub

嘻嘻,你晕了啊.
1\你先删除掉了List1的条目,然后再在List2上添加条目,这时候List1上对应的条目已经删除掉了,当然没有啦.哈哈.
2\你每执行一次FOR,就删除一个条目List1.ListCount总是在变化,不出错在怪.
Private Sub Command2_Click()
For i = 0 To List1.ListCount - 1
List2.AddItem List1.List(i)
Next
For i = List1.ListCount - 1 To 0 '这个地方注意倒过来啊,要不然又出错.
List1.RemoveItem i
Next
End Sub

因为你在循环开始时,就清除了List1的第一个列表数据,LIST1的第二个列表数据变成了第一个,这时list1的列表数据实际上已经少了一个,LIST2加入的实际上是LIST1原来的第二个数据,而不是原来程序的目的了,因此当运行到第list1.count/2时就会出错!

第一个比较简单
第二个是有错误的,不管List1.RemoveItem i 放在哪里