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
当用户选择文件夹名称时,您可以从 ComboBox 的 SelectedValue 属性中获取其完整路径
更多内容请关注...