【问题标题】:Populate ComboBox with Each FileType From Directory使用目录中的每个文件类型填充 ComboBox
【发布时间】:2014-09-28 17:58:20
【问题描述】:

基本上,我有一个ComboBox,我想用来自特定DirectoryFile Extensions 填充它。

目前,我正在使用:

Dim dir = "C:\"
For Each file As String In System.IO.Directory.GetFiles(dir)
   cmb_FileTypes.Items.Add(System.IO.Path.GetExtension(file))
Next

这不能正常工作,因为它基本上会加载目录中所有文件的所有扩展名。我想要它,以便它显示每个 ONE 文件类型。例如,如果有 10 个文件:

  • 文件1.jpg
  • 文件2.jpg
  • 文件3.png
  • 文件4.mp3
  • 文件5.mp3
  • 文件6.dat
  • 文件 7.dat
  • 文件8.tif
  • 文件9.jpg
  • 文件10.mp3

在这 10 个文件中,有 6 个文件扩展名是不同的文件扩展名:

  • JPG
  • PNG
  • MP3
  • 时间
  • tif

如何将这些文件扩展名中的每一个加载到 ComboBox 中,而不是重复它?

【问题讨论】:

    标签: vb.net list combobox


    【解决方案1】:

    使用LINQ 将所有扩展名一次性添加到组合框。

    cmb_FileTypes.Items.AddRange((From name In Directory.GetFiles(dir) Select Path.GetExtension(name).Replace(".", "") Distinct).ToArray())
    

    【讨论】:

    • 感谢您的输入好友,但keyboardP使用了LINQ并让它工作!
    • 很抱歉不是第一个发布的第一个,但是在发布之前需要一些时间来测试代码。顺便说一句,AddRange 是添加多个项目的首选方式,我敢打赌您不希望将句点包含在分机列表中。
    • 是的,你是对的,你的代码也可以工作!如果你是第一个,我会给予它,但我也会为你找到用处。请记住你也帮助过我!
    【解决方案2】:

    您可以使用 LINQ 对扩展进行分组

    For Each file As String In Directory.GetFiles(dir).[Select](Function(p) Path.GetExtension(p)).Distinct().OrderBy(Function(p) p).ToList()
        cmb_FileTypes.Items.Add(System.IO.Path.GetExtension(file))
    Next
    

    或者您可以创建一个返回包含唯一扩展名的List<string> 的方法。

    Public Function UniqueExtensions(filenames As String()) As List(Of String)
        Dim extSet As New HashSet(Of String)(StringComparer.OrdinalIgnoreCase)
        For Each file As String In filenames
            extSet.Add(System.IO.Path.GetExtension(file))
        Next
        Return extSet.ToList()
    End Function
    

    【讨论】:

    • 无法让它工作,因为 'List' 不是 'System.Linq.IOrderedEnumerable(Of String)' 的成员。为什么这么说?
    • 改用ToList()。抱歉,我用的 VB.NET 不多,所以是C#的翻译
    • 感谢@keyboardP 正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多