我的备选手机号为130个左右, Loop Until i <> Combo1.ListIndex And i < Combo1.ListCount And Combo1.ItemData(i) = 0这条语句会出现“无效属性数组索引”错误 怎么回事呢?
试试:Do Do i = Rnd * Combo1.ListCount Loop Until i < Combo1.ListCount Loop Until i <> Combo1.ListIndex And Combo1.ItemData(i) = 0Combo1.ListIndex = i Combo1.ItemData(i) = 1
是啊,都显示过了,就死循环了。所以说,你的手机号必须足够多。1 秒种滚动 20 个,你那 130 个手机号也就滚 6.5 秒。实际上,外层判断也不必检查是否与当前记录相同了,因为不允许重复:Do Do i = Rnd * Combo1.ListCount Loop Until i < Combo1.ListCount Loop Until Combo1.ItemData(i) = 0Combo1.ListIndex = i Combo1.ItemData(i) = 1要不,你就滚慢点儿。1 秒滚 5 个,够滚 26 秒。不允许重复的问题,在于对先滚到的手机号,也就是已经看到的手机号不公平。因为停的时候,一定没他神马事了。
还有,每次重新滚动之前,要将所有记录的 ItemData 清零:For i = 0 To Combo1.ListCount - 1 Combo1.ItemData(i) = 0 Next i
其实,抽奖算法就是随机数的应用,瞬间完成。你在电视上看到滚动的那个,只是视觉噱头。你用 Timer 就可以实现这样的功能。
Loop Until i <> Combo1.ListIndex And i < Combo1.ListCount And Combo1.ItemData(i) = 0这条语句会出现“无效属性数组索引”错误
怎么回事呢?
Do
i = Rnd * Combo1.ListCount
Loop Until i < Combo1.ListCount
Loop Until i <> Combo1.ListIndex And Combo1.ItemData(i) = 0Combo1.ListIndex = i
Combo1.ItemData(i) = 1
Do
i = Rnd * Combo1.ListCount
Loop Until i < Combo1.ListCount
Loop Until Combo1.ItemData(i) = 0Combo1.ListIndex = i
Combo1.ItemData(i) = 1要不,你就滚慢点儿。1 秒滚 5 个,够滚 26 秒。不允许重复的问题,在于对先滚到的手机号,也就是已经看到的手机号不公平。因为停的时候,一定没他神马事了。
还有,每次重新滚动之前,要将所有记录的 ItemData 清零:For i = 0 To Combo1.ListCount - 1
Combo1.ItemData(i) = 0
Next i
让这些手机号死命滚动,然后停,出现过一次的,就做个标记,下次不能再出现了,然后让剩余的再死命滚动,然后依此类推这样公平吧~~
你想用数组,当然可以。不过,VB 的精髓就是使用控件来简化代码。你觉得使用数组和 Combo 控件在逻辑上有什么本质的区别吗?Combo 的 ItemData 在这里就是标记。看问题,要看本质,也就是逻辑。具体实现是次要的。