按listbox中的字符串排序方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按listbox中的字符串排序方法相关的知识,希望对你有一定的参考价值。
由于listbox中的项目可能会随时增加或减少,所以会随时刷新listbox中的项目的排序,排序按照项目名中的时间字符串(项目名格式为:XXXX2007年XX月XX日XX时XX分XX秒),求一简单的方法实现。
Sorted:返回一个值,指定控件的元素是否自动按字母表顺序排序。
问题是:项目名是:XXXX+时间。它会按照XXXX的字母表顺序拍,我想用后面的时间排,但是不能改变名字格式
例如:项目名:前面通道2007年02月28日15时36分20秒.MP3,后面通道2006年03月01日16时50分00秒.MP3,左面通道2008年11月14日23时18分50秒.MP3,右面通道2007年02月14日05时02分01秒.MP3。。。。。格式是固定的
补充: 你前面的XXXX每个项目都是不固定的吗? 且是不定长的吗?
我可以给你个思路..
排序:
1.读取listbox项目到数组中.
2.取消文件头,按数字排序(不想写算法 就放到list中排序再拿出来)
3.对应的补回文件头..
建议楼主给一个实例,可以给5个完整的项目名..我可以帮你写一下排序的代码.
补充:( 这是用数来排序的,你的实例其实是日期,可以使用日期来排序,应该更方便一些,也可以偷偷懒,使用一个带排序的list,隐藏它, 用它来将list1中的数据排好后(将前缀移到后面),再放回到list1,并将后缀移到前面..)
代码:
Private Sub Command1_Click()
Dim a(), i%, j%, m&, n&, s$
ReDim a(List1.ListCount - 1)
For i = 0 To List1.ListCount - 1
a(i) = List1.List(i)
Next
For i = 0 To UBound(a)
For j = i + 1 To UBound(a)
m = Val(Mid(a(i), 7, 2) & Mid(a(i), 10, 2) & Mid(a(i), 13, 2) & Mid(a(i), 16, 2) & Mid(a(i), 19, 2) & Mid(a(i), 21, 2))
n = Val(Mid(a(j), 7, 2) & Mid(a(j), 10, 2) & Mid(a(j), 13, 2) & Mid(a(j), 16, 2) & Mid(a(j), 19, 2) & Mid(a(j), 21, 2))
If n < m Then
s = a(i)
a(i) = a(j)
a(j) = s
End If
Next
Next
List1.Clear
For i = 0 To UBound(a)
List1.AddItem a(i)
Next
End Sub
Private Sub Form_Load()
List1.AddItem "前面通道2007年02月28日15时36分20秒.MP3"
List1.AddItem "后面通道2006年03月01日16时50分00秒.MP3"
List1.AddItem "左面通道2008年11月14日23时18分50秒.MP3"
List1.AddItem "右面通道2007年02月14日05时02分01秒.MP3"
End Sub
=======================================
再次修改,上面的排序是按数字大小来的..如果是数字,当然是唯一的方法,楼主要求排序的是日期,想一想还是用日期来排序比较简洁:
Private Sub Command1_Click()
Dim i%, j%, s$
For i = 0 To List1.ListCount - 1
For j = i + 1 To List1.ListCount - 1
If CDate(Mid(List1.List(j), 5, 20)) < CDate(Mid(List1.List(i), 5, 20)) Then
s = List1.List(i)
List1.List(i) = List1.List(j)
List1.List(j) = s
End If
Next
Next
End Sub
Private Sub Form_Load()
List1.AddItem "前面通道2007年02月28日15时36分20秒.MP3"
List1.AddItem "后面通道2006年03月01日16时50分00秒.MP3"
List1.AddItem "左面通道2008年11月14日23时18分50秒.MP3"
List1.AddItem "右面通道2007年02月14日05时02分01秒.MP3"
End Sub 参考技术A 把listbox的sorted属性设置为true
在VB.net中,如何把listbox中的数值进行排序
如题,现在listbox中有Apple,Cat,Yellow,Guilty等首字母乱序单词,如何将其首字母从A-Z或者从Z-A排序?用copyto总是会报错:Object reference not set to an instance of an object.
那有没有其他方法呢?
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ListBox1.Items.Add("Apple")
ListBox1.Items.Add("Cat")
ListBox1.Items.Add("Yellow")
ListBox1.Items.Add("Guilty")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ListBox1.Sorted = True
End Sub
End Class 参考技术B vb.net中,listbox控件的Sorted属性有false和true两个,true是自动排序(如果设置的话会马上整理),false是不排序。如果要倒序的话推荐使用数组,这样好操作一些。
还有你的书上是有这些的吧,如果没有的话书可以over了(都是入门级的) 参考技术C VB6.0实现方法:在属性编辑框中,将Sorted属性改为True即可
以上是关于按listbox中的字符串排序方法的主要内容,如果未能解决你的问题,请参考以下文章
vb listbox每行里有文本加数字,如何按数字从大到小排序?