| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5319 人关注过本帖
标题:如何将文件列表框中所选择的对象一次性添加到列表框中
只看楼主 加入收藏
tszhaoweiwen
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-6-30
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:6 
如何将文件列表框中所选择的对象一次性添加到列表框中
图片附件: 游客没有浏览图片的权限,请 登录注册


使用列表框将一个列表框中的内容移动到另一个列表框中
如何实现向左/右移动多个选择的项?
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
If List1.ListCount = 0 Then
Exit Sub
End If
If List1.ListIndex = -1 Then
List1.SetFocus
List1.Selected(0) = True
End If
DoEvents
List2.AddItem List1.Text
List1.RemoveItem List1.ListIndex
Case 1
If List1.ListCount = 0 Then
Exit Sub
End If
If List1.ListIndex = -1 Then
List1.SetFocus
List1.Selected(0) = True
End If
DoEvents
For i = (List1.ListCount - 1) To 0 Step -1
List2.AddItem List1.List(i)
DoEvents
Next i
List1.Clear
Case 2
If List2.ListCount = 0 Then
Exit Sub
End If
If List2.ListIndex = -1 Then
List2.SetFocus
List2.Selected(0) = True
End If
List1.AddItem List2.Text
List2.RemoveItem List2.ListIndex

Case 3
If List2.ListCount = 0 Then
Exit Sub
End If
If List2.ListIndex = -1 Then
List2.SetFocus
List2.Selected(0) = True
End If
For i = (List2.ListCount - 1) To 0 Step -1
List1.AddItem List2.List(i)
DoEvents
Next i
List2.Clear
End Select
End Sub



Private Sub Form_Load()
List1.AddItem "姓名", 0
List1.AddItem "性别", 1
List1.AddItem "年龄", 2
List1.AddItem "籍贯", 3
List1.AddItem "文化程度", 4
End Sub

[ 本帖最后由 tszhaoweiwen 于 2015-7-15 16:55 编辑 ]
搜索更多相关主题的帖子: 如何 
2015-07-15 16:54
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
以前的代码都是从来不考虑顺序的,第一次考虑顺序不能变,所以就写出了超长的代码。
慢慢看吧。控件,大体上是按你的控件排列的。
你的代码不愿看,没有缩进,看花眼

不考虑顺序就是
Dim i As Long
For i = 0 To List1.ListCount - 1
    If List1.Selected(i) Then
        List2.AddItem List1.List(i)
    End If
Next i

For i = List1.ListCount - 1 To 0 Step -1
    If List1.Selected(i) Then
        List1.RemoveItem i
    End If
Next i


程序代码:
Option Explicit

Private Enum LE             '枚举,位置只有二种
    L1 = 0
    L2 = 1
End Enum

Private Type Ltype
    N As String             '内容
    L As LE                 '所属列表
End Type

Dim L() As Ltype            '数组
Dim Lconst As Long          '数组元素个数

Private Sub Command1_Click(Index As Integer)
Dim i As Long

Select Case Index
    Case 0
        If List1.SelCount = 0 Then Exit Sub
        For i = 0 To List1.ListCount - 1
            If List1.Selected(i) Then
                L(FindL(List1.List(i))).L = L2          '把该项目名字查数组,得到索引号,然后设置到列表2
            End If
        Next i
    Case 1
        For i = 0 To Lconst
            L(i).L = L2                                 '全列表2
        Next i
    Case 2
        If List2.SelCount = 0 Then Exit Sub
        For i = 0 To List2.ListCount - 1
            If List2.Selected(i) Then
                L(FindL(List2.List(i))).L = L1
            End If
        Next i
    Case 3
        For i = 0 To Lconst
            L(i).L = L1
        Next i
End Select
Call Lview
End Sub

Private Sub Form_Load()
Lconst = 4                  '总5个,从0起就=4
ReDim L(Lconst)

L(0).N = "姓名"             '5项的名字
L(1).N = "性别"
L(2).N = "年龄"
L(3).N = "籍贯"
L(4).N = "文化程度"

Dim i As Long
For i = 0 To Lconst
    L(i).L = L1         '默认全是列表1
Next i

Call Lview
End Sub

Public Sub Lview()
'把项目按照设置值排列在二个列表框中,做到按顺序排列,并且不能出现闪烁,也就是不能整体清除,再添加
Dim i As Long
Dim j As Long
Dim lw1 As Long, lw2 As Long

For i = 0 To Lconst
    If L(i).L = L1 Then                     '如果属于列表1
        j = FindList(L(i).N, List1)         '检索是否在列表1
        If j = -1 Then                      '不在
            List1.AddItem L(i).N, lw1       '根据应该在的位置,添加进去
            j = FindList(L(i).N, List2)     '检索是否在列表2
            If j > -1 Then List2.RemoveItem j       '如果在,则删掉
        End If
            lw1 = lw1 + 1                   '计算下一个项目如果属于列表1的话,应该在的位置
    Else
        j = FindList(L(i).N, List2)
        If j = -1 Then
            List2.AddItem L(i).N, lw2
            j = FindList(L(i).N, List1)
            If j > -1 Then List1.RemoveItem j
        End If
            lw2 = lw2 + 1
    End If
Next i
End Sub

Public Function FindList(cs As String, Obj As ListBox) As Long
'查询 项目 在指定的列表中的索引值,可能不存在的
Dim i As Long
FindList = -1
For i = 0 To Obj.ListCount - 1
    If Obj.List(i) = cs Then
        FindList = i
        Exit For
    End If
Next i
End Function

Public Function FindL(cs As String) As Long
'查询 项目 在数组中的索引值
Dim i As Long
For i = 0 To Lconst
    If L(i).N = cs Then
        FindL = i
        Exit For
    End If
Next i
End Function

授人于鱼,不如授人于渔
早已停用QQ了
2015-07-15 22:11
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
另一种排列项目的方式
程序代码:
Public Sub Lview()
'把项目按照设置值,排列在二个列表中,按顺序排列,数据量大时会闪烁,采取全清全加方式
Dim i As Long
List1.Clear
List2.Clear
For i = 0 To Lconst
    If L(i).L = L1 Then
        List1.AddItem L(i).N
    Else
        List2.AddItem L(i).N
    End If
Next i
End Sub

授人于鱼,不如授人于渔
早已停用QQ了
2015-07-15 22:16
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
为什么把数据放到数组?
原因在于,想保持原有的顺序不变。
如果不放到数组里,而直接放到列表框中,那么每次移动后,就只能放到尾部,从而造成顺序乱掉了。
对于一些要求严格的程序来讲,如这个,姓名永远都要摆在第一位的。

授人于鱼,不如授人于渔
早已停用QQ了
2015-07-15 22:19
tszhaoweiwen
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2015-6-30
收藏
得分:0 
回复 2楼 风吹过b
回复很详细很迅速,十分感谢。我是刚刚接触VB的新人,想还想问问版主用的代码是用 VB什么版本写? 我现在在用VB6.0是不是比较旧的啦?还有就是代码如何缩进啊?
2015-07-15 22:33
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
这些代码都是在 VB6 里写的。 缩进,按 TAB 键进行缩进。

授人于鱼,不如授人于渔
早已停用QQ了
2015-07-16 08:25
yuk_yu
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:334
专家分:134
注 册:2009-3-16
收藏
得分:0 
回复 6楼 风吹过b
缩进有专门的工具的,有需要的可以与大家分享!
2015-07-28 12:11
快速回复:如何将文件列表框中所选择的对象一次性添加到列表框中
数据加载中...
 
   



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

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