回 帖 发 新 帖 刷新版面

主题:listBox问题(祥细描述)

在文本框中输入一个姓氏,单击“删除”按钮,则可删除List1中所有该姓氏的项目。若编写以下程序来实现此功能:
Private Sub Command1_Click()
    dim n%,k%
    n=len(Text1.Text)
    For k=0 To List1.ListCount-1
        If Left(List1.List(k),n)=Text1.Text Then
            List1.RemoveItem k
        End if
    Next
End Sub
在调试时发现,如果输入“陈”,可以正确删除所有姓“陈”的项目,但输入“刘”,则只删除了“刘邦”,“刘备”2项,如图所示。
把For k=0 To List1.ListCount-1 改为
  For k=List1.ListCount-1 to 0 Step-1
就能解决这个问题,这是为什么?

回复列表 (共3个回复)

沙发

这是因为当你删除List1中的第一项(项号=0)后,后面的项会立即自动上移,如果是删除陈姓,删除陈胜后,吴广就上移为0号,项羽为1号,陈寿为2号...,此时程序继续循环,k=1了,所以陈寿可以删除。当你删除刘姓时,刘帮为4号,可以删除,删除后,刘秀上移为4号,刘备为5号,继续循环,k=5了,所以刘秀没删,而刘备删了。
如果用For k=List1.ListCount-1 to 0 Step-1这样的句式,就不会产生这样的问题

板凳


看了我也懂了!!!!!!
感谢解决了我的一个问题啊!!!!!!

3 楼


原来如此

我来回复

您尚未登录,请登录后再回复。点此登录或注册