VB6.0 Listbox如何重新按要求排序

如图所示,短文件名已做了处理按数字排列,但是长文件名的排序与右边WINDOS的排序不一样,现在怎样处理才能让Listbox的排序与WINDOS里面的排序一样?急!!说明,文件的字母是不定的,所以用砍名字的排序法不适应,要求名字不能改变。

一般列表控件默认排序都是按照字母和数字大小顺序排列的。如果要像图中所示排列,先要对文件名长度进行排列,在文件名长度一致的情况下,按字母和数字大小排列。这样就需要做一个循环,应该能解决这个问题。追问

我已经做了冒泡排序法,但现在问题是文件名称长度是不一样的,例如L2215B1-1T1,
L2215B1-1T2,L2215B1-1T1A,L2215B1-1T1B,我要将L2215B1-1T1A,L2215B1-1T1B排在L2215B1-1T1之下,如果做了文件名长度一致再排序的THEN,那怎么保证不是一样长度名字也会排?怎样做到如同WINDOS文件夹下文件自动排序的效果?

追答

先按长度排序,再按文件名排序,应该没问题啊。做一个隐藏的LISTBOX,自动排完以后加入到当前显示的LISTBOX里。

追问

先按长度排序,再按文件名排序代码怎么写?

追答

加载1个FILE控件和两个LISTBOX控件,一个LISTBOX为隐藏并设置SORTED属性为TRUE。把某目录下文件读取到FILE列表控件里,对FILE控件进行循环读取,获得该目录下最短文件名长度N1和最长文件名长度N2。然后做一个两层循环:
For j% = N1 To N2 '按文件名长度进行循环
Dim N As Integer
N = 0: List2.Clear
For i% = 0 To File1.ListCount - 1 ‘对所有文件名进行循环,如果文件名长度一致,则加入到LIST2进行自动排列
File1.ListIndex = i%
If Len(File1.FileName) = j% Then
N = N + 1
List2.AddItem File1.FileName
End If
Next i%
If N > 0 Then ’如果LIST2里面的项目数不为空,则按照自动排好的顺序呢加入到LIST1列表
For i% = 0 To List2.ListCount - 1
List1.AddItem List2.List(i%)
Next i%
End If
Next j%

也可以先定义一个数组,可以对文件列表进行循环一次,减少循环次数,具体简化自己来。

温馨提示:答案为网友推荐,仅供参考
相似回答