逆序排列后怎么判断Item的index?
在进一步,比如说,当ListBox的Item满100条以后,将最旧的一条item删除,再在头上插入最新add的一条?

解决方案 »

  1.   

    '在窗体里面加两个CommandButton和一个ListBox
    Private Sub Command1_Click()
    Dim i As Long
    For i = 1 To 100
        List1.AddItem CStr(i), 0
    Next i
    End SubPrivate Sub Command2_Click()
    List1.AddItem "101", 0
    If List1.ListCount > 100 Then List1.RemoveItem 100
    End Sub
      

  2.   

    比如说射频卡刷卡器
    每次刷卡,ListBox里增加一条记录,记录每次刷卡的信息
    最后一次刷卡的信息在最前面(也就是头上),等于是按AddItem的先后顺序的逆序排列
    当满100条后,将最后(最老)的记录删除,并仍在最前面加入新的一条记录
    像队列的FIFO机制一样VB新手,说明和比喻必有粗糙之处,望各位不吝赐教 :D
      

  3.   

    没有到100条的时候,for i=1 to list1.listcount(总数)
                     list1.list(i)=list1.list(i-1)(将每条记录下移一位)
                     next
                     list1.list(0)=你要添加的新内容
    当到大于100的时候for i=1 to 100 
                    list1.list(i)=list1.list(i-1)(将每条记录下移一位)
                     next
                     list1.list(0)=你要添加的新内容(将最上面的一条赋值)
      

  4.   

    Private Sub Command1_Click()
    List1.AddItem Now(), 0
    If List1.ListCount > 100 Then
    For i = 100 To List1.ListCount - 1
        List1.RemoveItem i
    Next
    End If
    End Sub在超过一百条删除时,我用了一个循环,是因为怕你的程序在别的地方会增加list的数据,如果你确信你的程序中没有这种情况,只有command1能够增删list的数据,那么上面的循环语句可以省略,简化成一句:
    If List1.ListCount > 10 Then List1.RemoveItem 100
      

  5.   

    哦。打错了。Private Sub Command1_Click()
    List1.AddItem Now(), 0
    If List1.ListCount > 100 Then
    For i = 100 To List1.ListCount - 1
        List1.RemoveItem i
    Next
    End If
    End Sub在超过一百条删除时,我用了一个循环,是因为怕你的程序在别的地方会增加list的数据,如果你确信你的程序中没有这种情况,只有command1能够增删list的数据,那么上面的循环语句可以省略,程序简化成:Private Sub Command1_Click()
    List1.AddItem Now(), 0
    If List1.ListCount > 100 Then  List1.RemoveItem 100
    End Sub
      

  6.   

    if list1.listcount<100 then
                     list1.additem( 增加一条纪录)
                     for i=0 to list1.listcount(总数)
                     list1.list(i+ 1)=list1.list(i)(将每条记录下移一位)
                     next
                     list1.list(0)=你要添加的新内容
      end if
       if list1.listcount > = 100 then
                    list1.removeitem( 删除最后一条)
                    list1.additem
                    for i= 0 to 100 
                    list1.list(i+1)=list1.list(i)(将每条记录下移一位)
                     next
                     list1.list(0)=你要添加的新内容(将最上面的一条赋值)   end if 
      

  7.   

    goodname008(卢培培,想学好VB)的方法应该是可行的。但你应该设置排序属性为FALSE。aiguo25(青春无悔)的方法值得商榷,因为ListBox在VC的MFC里根本没有修改某一项的方法,后来查看消息,也没有修改某一项的消息。可以肯定,VB里修改某一项的方法也是通过删除,后添加来完成的,只不过VB隐藏了这个细节,所以效率肯定不高的。
    再说,用在这里也不合适。
      

  8.   

    goodname008(卢培培,想学好VB)的方法是可行的,但是这里的需求是逆序,而且是当additem的时候进行排列,所以这里不适合用aiguo25(青春无悔)的方法逻辑没有错误,但是似乎不能通过修改XXX.List(x)的方法来修改该item的值。有的话还望告知:Dlsftest()的方法不错,已经满足需求了。
    lazycat818(lazycat818)分析的也很好啊,但是似乎绕不开先删除,后添加这条路。
    不过还好,这里数据量也不是很大,凑合着用吧 :P我最后自己写的代码是:
    StateList.ListCount
        While StateList.ListCount> 0
            i = StateList.ListCount- 1
            If i < 100 Then
                StateList.AddItem StateList.List(i), StateList.ListCount
            End If
            StateList.RemoveItem (i)
            StateList.ListCount = StateList.ListCount- 1
        Wend
        StateList.AddItem ListString, 0呵呵,VB刚开始学用了一个星期,现在东西做完了,不知道什么时候会再用了,也许VB.net吧:D再次感谢大家!