【问题标题】:How to get the list of folders in ComboBox using FOR loop in vb.net?使用 FOR 循环的 ComboBox 中的 VB.NET 文件夹列表
【发布时间】:2022-12-07 15:46:45
【问题描述】:

我正在寻找一种使用 FOr 循环列出集合文件夹中的子文件夹的方法。我得到了这个文件夹中的文件,例如:

            For Each File As String In System.IO.Directory.GetFiles("G:\100 Databases\ASSETS\FLAGS\JPG\")
                .Items.Add(System.IO.Path.GetFileNameWithoutExtension(File))
            Next

但这对文件夹来说如何

            For Each Folder As String In IO.Directory.GetDirectories(ClientsFolder)
                .Items.Add(System.IO.Path.GetDirectoryName(Folder))
            Next

我的版本只列出了客户端文件夹子文件夹的次数,但没有列出实际的子文件夹名称。

【问题讨论】:

    标签: vb.net list directory combobox


    【解决方案1】:

    Path 类仅适用于 Strings。它对实际文件和文件夹一无所知。它只知道文件系统路径的约定。 GetFileName 方法将简单地获取最后一个 "" 分隔符之后的所有内容,而不区分文件和文件夹路径。这就是你需要使用的:

    .Items.Add(System.IO.Path.GetFileName(Folder))
    

    也就是说,您可以对该代码进行更多改进。

    首先,您通常应该只使用命名空间来限定一个类型一次。如果您需要两次或多次使用相同的命名空间,请改为导入该命名空间。您可以在项目范围内导入名称空间参考项目属性页面,或者您可以在代码顶部的文件级别导入它,例如

    Imports System.IO
    

    接着:

    For Each Folder As String In Directory.GetDirectories(ClientsFolder)
        .Items.Add(Path.GetDirectoryName(Folder))
    Next
    

    其次,与Add 进行多次调用相比,对AddRange 进行一次调用通常更可取。如果您在这里和那里添加单个项目,那是不同的,但您应该在循环中调用 AddRange 而不是 Add。在大多数情况下,它不会真正产生太大影响,如果有的话,但养成良好的习惯是件好事,这样你就不会在重要的时候做错事,例如

    Dim folders = Directory.GetDirectories(clientsFolder)
    
    For i = 0 To folders.getUpperBound(0)
        folders(i) = Path.GetFileName(i)
    Next
    
    .Items.AddRange(folders)
    

    请注意,我还使用了小写字符作为变量名的开头。您不必这样做,但这是 Microsoft 推荐的,也是大多数 .NET 开发人员所做的。

    接下来,通常最好将列表绑定到 ComboBox 而不是直接添加项目。对于一个简单的列表,它并没有太大的区别,但在这里可能是有利的。你能做什么它使用DirectoryInfo对象而不是简单的Strings。然后您可以显示 Name 属性,它只是文件夹名称,但仍然可以访问 FullName 属性,这是完整路径,例如

    Dim clientsFolder = New DirectoryInfo(clientsFolderPath)
    Dim subFolders = clientsFolder.GetDirectories()
    
    .DisplayMember = NameOf(DirectoryInfo.Name)
    .ValueMember = NameOf(DirectoryInfo.FullName)
    .DataSource = subFolders
    

    当用户选择文件夹名称时,您可以从 ComboBoxSelectedValue 属性中获取其完整路径

    更多内容请关注...

    【讨论】:

    • 是的,我已经导入了“system.io”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 2015-02-18
    • 2023-03-25
    相关资源
    最近更新 更多