标题:vb6 ListBox 项目移至顶部或底部
只看楼主
Ez330阿牛
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2014-3-5
结帖率:11.11%
已结贴  问题点数:20 回复次数:3 
vb6 ListBox 项目移至顶部或底部
Private Sub Comm_底_Click()
    Dim a, b
    Indexs = List_待选.ListIndex
    If Indexs >= 0 Then
        a = List_待选.List(Indexs)
        b = List_待选.Selected(Indexs)
        For i = Indexs To List_待选.ListCount - 2
            List_待选.List(i) = List_待选.List(i + 1)
            List_待选.Selected(i) = List_待选.Selected(i + 1)
            DoEvents
        Next
        List_待选.List(List_待选.ListCount - 1) = a
        List_待选.Selected(List_待选.ListCount - 1) = b
    End If
    Indexs = -1
End Sub

Private Sub List_待选_GotFocus()
    Client = False
    Command_Save_Click
End Sub
Private Sub List_待选_LostFocus()
    Client = True
End Sub
Private Sub Command_Save_Click()
    Lista = ""
    For xf = 0 To List_待选.ListCount - 1
        Lista = Lista & List_待选.List(xf) & "<>" & List_待选.Selected(xf) & "|"
        DoEvents
    Next
    If Lista <> "" Then WriteInI "List", "List_待选", Lista, BasePath & "\Uservar(勿删).ini"
End Sub
Private Sub Comm_顶_Click()
    Dim a, b
    Indexs = List_待选.ListIndex
    If Indexs > 0 Then
        a = List_待选.List(Indexs)  '记住上一个的位置
        b = List_待选.Selected(Indexs)
        For i = Indexs To 1 Step -1
            List_待选.List(i) = List_待选.List(i + 1)
            List_待选.Selected(i) = List_待选.Selected(i + 1)
        Next
        List_待选.List(0) = a
        List_待选.Selected(0) = b
    End If
    Indexs = -1
End Sub
我这个存在问题就是移至顶部或者底部时间会产生重复项,研究了n天一直找到不解决办法,请大神帮忙(注:不要单纯两个位置的交换,那样的没有意义,要排列非常费时间)
搜索更多相关主题的帖子: 项目 
2014-03-18 21:42
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
得分:10 
把到顶的+1改成-1,如下:
Private Sub Comm_顶_Click()
    Dim a, b
    Indexs = List_待选.ListIndex
    If Indexs > 0 Then
        a = List_待选.List(Indexs)  '记住上一个的位置
        b = List_待选.Selected(Indexs)
        For i = Indexs To 1 Step -1
            List_待选.List(i) = List_待选.List(i - 1)
            List_待选.Selected(i) = List_待选.Selected(i - 1)
        Next
        List_待选.List(0) = a
        List_待选.Selected(0) = b
    End If
    Indexs = -1
End Sub

其实,可以更简单些,如下:
Private Sub Comm_底_Click()
    Dim a As String, i As Integer
    i = List_待选.ListIndex
    If i >= 0 Then
        a = List_待选.List(i)
        List_待选.RemoveItem (i)
        List_待选.AddItem a
        List_待选.Selected(List_待选.ListCount - 1) = True
    End If
End Sub

Private Sub Comm_顶_Click()
    Dim a As String, i As Integer, j As Integer
    j = List_待选.ListIndex
    If j > 0 Then
        For i = j To 1 Step -1
          a = List_待选.List(i)
          List_待选.List(i) = List_待选.List(i - 1)
          List_待选.List(i - 1) = a
        Next
        List_待选.Selected(0) = True
    End If
End Sub

[ 本帖最后由 lowxiong 于 2014-3-18 23:41 编辑 ]
2014-03-18 23:38
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
得分:10 
推荐用按键控制:
vbKeyHome
vbKeyEnd
vbKeyPageUp
vbKeyPageDown
2014-03-19 03:13
Ez330阿牛
Rank: 2
等 级:论坛游民
帖 子:42
专家分:14
注 册:2014-3-5
得分:0 
回复 2楼 lowxiong
谢谢了,你写的目前测试比我的好用,现在要怎么把分给你,3楼的建议也不错
2014-03-19 23:24



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-428752-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.234366 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved