Vb.net 对列表框项目进行排序
所以我有两个列表框。Listbox1从一个目录中收集文件,我有一个add按钮将Listbox1中选定的文件添加到Listbox2 有没有办法对这些项目进行手动排序?也许有上下按钮 我之所以要排序/重新排序,是因为我将有一个进程来运行这些选定的文件,并且每个文件都必须生成另一个文件名唯一的文件 一个简单的例子是processfile1.txt和productfile1.pdf,等等 是否有更简单的方法来完成排序/重新排序 更新 下面是我当前如何填充我的Vb.net 对列表框项目进行排序,vb.net,winforms,visual-studio-2010,listbox,Vb.net,Winforms,Visual Studio 2010,Listbox,所以我有两个列表框。Listbox1从一个目录中收集文件,我有一个add按钮将Listbox1中选定的文件添加到Listbox2 有没有办法对这些项目进行手动排序?也许有上下按钮 我之所以要排序/重新排序,是因为我将有一个进程来运行这些选定的文件,并且每个文件都必须生成另一个文件名唯一的文件 一个简单的例子是processfile1.txt和productfile1.pdf,等等 是否有更简单的方法来完成排序/重新排序 更新 下面是我当前如何填充我的列表框1,然后再将任何内容添加到列表框2,这是
列表框1
,然后再将任何内容添加到列表框2
,这是我希望以某种方式排序的列表框
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
您可以使用数据绑定,而不是将项目逐个添加到
列表框中。我建议您首先将文件添加到列表中,然后对列表进行排序,并将其分配到列表框
的数据源
定义类成员的列表
Private _list As New List(Of String)()
将其分配到列表框
listBox1.DataSource = _list
然后使用
_list.Add("new file")
_list.Sort()
' Refresh the ListBox
listBox1.DataSource = Nothing
listBox1.DataSource = _list
更新
如果要实现自己的排序顺序,请实现一个i比较程序(字符串)
然后你可以这样分类
Static comparer = New MyFileComparer()
_list.Sort(comparer)
更新#2
我不知道文件的确切名称,但是如果它们总是以“FILE”结尾。
您也可以更改字符串比较的文件名,如下所示:
原始文件名
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
您可以使用数据绑定,而不是将项目逐个添加到列表框中。我建议您首先将文件添加到列表中,然后对列表进行排序,并将其分配到列表框
的数据源
定义类成员的列表
Private _list As New List(Of String)()
将其分配到列表框
listBox1.DataSource = _list
然后使用
_list.Add("new file")
_list.Sort()
' Refresh the ListBox
listBox1.DataSource = Nothing
listBox1.DataSource = _list
更新
如果要实现自己的排序顺序,请实现一个i比较程序(字符串)
然后你可以这样分类
Static comparer = New MyFileComparer()
_list.Sort(comparer)
更新#2
我不知道文件的确切名称,但是如果它们总是以“FILE”结尾。
您也可以更改字符串比较的文件名,如下所示:
原始文件名
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
根据奥利弗的回答,也许a对你有用
如果您需要的不仅仅是alpha名称排序,还可以使用OrderBy对项目进行排序
var sorted = from m in myCollection select m orderBy m.FileName;
(语法可能不正确)背上奥利弗的答案,也许a对你有用
如果您需要的不仅仅是alpha名称排序,还可以使用OrderBy对项目进行排序
var sorted = from m in myCollection select m orderBy m.FileName;
(语法可能已关闭)如果每次文件名都不相同怎么办?也就是说,今天的文件可能被命名为xyz_FILE1.txt或xyx_123_FILE1.txt。我正在寻找某种方法来始终将某个文件作为列表框中的第一项,依此类推。Sort
例程有一个重载,它接受一个IComparaer
。这允许你实现自己的排序顺序。我一定会仔细考虑你的建议。说到VB(自学),我还是个新手,所以我可能还有其他问题。你提醒我你是用VB编程的。我将代码从C#更改为VB。是否有更好的方式向您展示我当前更新的代码?我看到过一个使用比较器的例子,根据我填充列表框的方式,我不能100%确定如何使用比较器。如果每次文件名都不相同怎么办?也就是说,今天的文件可能被命名为xyz_FILE1.txt或xyx_123_FILE1.txt。我正在寻找某种方法来始终将某个文件作为列表框中的第一项,依此类推。Sort
例程有一个重载,它接受一个IComparaer
。这允许你实现自己的排序顺序。我一定会仔细考虑你的建议。说到VB(自学),我还是个新手,所以我可能还有其他问题。你提醒我你是用VB编程的。我将代码从C#更改为VB。是否有更好的方式向您展示我当前更新的代码?我看到了一个使用比较器的示例,但根据我填充列表框的方式,无法100%确定如何使用它。您应该从For Each循环中删除ListBox1.DataSource=\u list
。循环结束后刷新列表框就足够了,并且第一次不需要ListBox1.DataSource=Nothing
。只有在以后才需要,以便强制数据源
刷新;否则,当您再次分配同一列表时,即使您同时向列表中添加了项目,它也不会执行任何操作。请在下一步
之后调用\u list.Sort()
。在每次添加单个项目后对列表进行排序没有意义。您应该从For each循环中删除ListBox1.DataSource=\u list
。循环结束后刷新列表框就足够了,并且第一次不需要ListBox1.DataSource=Nothing
。只有在以后才需要,以便强制数据源
刷新;否则,当您再次分配同一列表时,即使您同时向列表中添加了项目,它也不会执行任何操作。请在下一步
之后调用\u list.Sort()
。在每次添加单个项目后,没有必要对列表进行排序。