所以我有两个ListBoxes。 Listbox1从目录收集文件,我有一个添加按钮,用于将Listbox1中的选定文件添加到Listbox2。
有没有办法手动对这些项目进行排序?也许有一个向上按钮?
我想要排序/重新排序的原因是我将有一个运行这些选定文件的进程,每个文件都必须生成另一个文件名唯一的文件。
一个简单的例子是处理FILE1.txt并生成FILE1.pdf等。
是否有更简单的方法来完成排序/重新排序?
更新
目前,我正在填充listbox1
,然后向listbox2
添加任何内容,这是我想要排序的ListBox。
Dim directoryInfo As _
New System.IO.DirectoryInfo(FolderBrowserDialog1.SelectedPath)
Dim fileInfos() As System.IO.FileInfo
fileInfos = directoryInfo.GetFiles()
For Each fileInfo As System.IO.FileInfo In fileInfos
ListBox1.DataSource = _list
_list.Add(fileInfo.Name)
_list.Sort()
Next
'Refresh Listbox1
ListBox1.DataSource = Nothing
ListBox1.DataSource = _list
答案 0 :(得分:2)
您可以使用数据绑定,而不是将项目逐个添加到ListBox
。我建议您先将文件添加到列表中,然后对列表进行排序并将其分配给ListBox
的{{1}}。
将列表定义为类成员
DataSource
将其分配给Private _list As New List(Of String)()
ListBox
然后使用
添加新的列表条目 listBox1.DataSource = _list
<强>更新强>
如果您想实现自己的排序顺序,请实施_list.Add("new file")
_list.Sort()
' Refresh the ListBox
listBox1.DataSource = Nothing
listBox1.DataSource = _list
IComparer(Of String)
然后你可以像这样排序
Class MyFileComparer
Implements IComparer(Of String)
Public Function Compare(x As String, y As String) As Integer _
Implements IComparer(Of String).Compare
Const AlwaysFirst As String = "FILE1"
Dim x = If(x.Contains(AlwaysFirst), "1_", "2_") & x
Dim y = If(y.Contains(AlwaysFirst), "1_", "2_") & y
' Note: If "FILE1" appears always at the end then this would be better
'Dim x = If(x.EndsWith(AlwaysFirst & ".txt"), "1_", "2_") & x
'Dim y = If(y.EndsWith(AlwaysFirst & ".txt"), "1_", "2_") & y
' Normalize strings (e.g. if "File_123.txt" = ""File 123.txt")
x = x.Replace("_"C, " "C)
y = y.Replace("_"C, " "C)
Return x.CompareTo(y)
End Function
End Class
更新#2
我不知道您的文件是如何完全命名的,但是如果它们总是以Static comparer = New MyFileComparer()
_list.Sort(comparer)
结尾,您还可以更改字符串比较的文件名,如下所示:
原始文件名
abc_FILE1.txt abc_123_FILE2.txt sssd_FILE23.txt xxx_24_FILE073.txt
准备好的文件名
FILE001_abc.txt FILE002_abc_123.txt FILE023_sssd.txt FILE073_xxx_24.txt
现在"FILE<number>.<ext>"
方法可以使用
Compare
答案 1 :(得分:2)
对Olivier的答案进行抄袭,或许Sorted List对您有用吗?
如果您需要的不仅仅是字母名称排序,还可以使用OrderBy对项目进行排序。
var sorted = from m in myCollection select m orderBy m.FileName;
(语法可能已关闭)