我正在制作一个VB.Net应用程序,该应用程序将用于更快地打开Visual Studio项目。我将项目添加到ComboBox
中,我想使用一个按钮打开SLN文件。到目前为止,这是我的代码。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
For Each dir As String In Directory.GetDirectories(My.Computer.FileSystem.SpecialDirectories.MyDocuments + "\Visual Studio 2017\Projects\")
Dim Folders As String = dir.Split("Projects\")(1)
Dim Project As String = Folders.Split("\")(1)
CBProjects.Items.Add(Project)
Next
End Sub
Private Sub BTNOpen_Click(sender As Object, e As EventArgs) Handles BTNOpen.Click
End Sub
因此,它获取文件夹并拆分它们,因此仅显示项目名称。由于某种原因,它为我的一个项目获取了一个空白文件夹。另外,现在我将其拆分了,我如何获得所选文件夹的完整路径,因此可以使用System.IO.File.Open()
打开它,谢谢!
编辑:它正在提供一个空文件夹,因为它是在P处将其拆分。
答案 0 :(得分:2)
正如您所说,代码中的问题是字符串在“ P”上分割。这是因为您使用的String.Split(Char())
overload以一个字符数组作为参数,这实际上是一个字符串。找到这些字符中的任何一个后,字符串将被分割。
相反,您应该使用String.Split(String(), StringSplitOptions)
overload,它使用字符串数组。
Dim Project As String = dir.Split(New String() {"Projects\"}, StringSplitOptions.RemoveEmptyEntries)(1)
不过,您可以在此处进行两件事改进:
使用Path.Combine()
来构造它,而不是将两个字符串手动连接到路径中。这包括错误检查并确保路径构造正确。
使用Path.GetFileName()
来获取项目目录的名称,而不是拆分字符串。
结果代码为:
For Each dir As String In Directory.GetDirectories(Path.Combine(My.Computer.FileSystem.SpecialDirectories.MyDocuments, "Visual Studio 2017", "Projects"))
Dim Project As String = Path.GetFileName(dir)
CBProjects.Items.Add(Project)
Next
答案 1 :(得分:1)
为您的自定义ComboItem添加新类
Public Class ProjectComboItem
Public Display As String
Public ProjectPath As String
Public Overrides Function ToString() As String
Return Display
End Function
End Class
将项目加载到ComboBox中:
Private Sub loadProjectComboBox()
ProjectComboBox.Items.Clear()
Dim projectParent As String = "<yourpath>\Visual Studio 2017\Projects"
Dim paths() As String = Directory.GetFiles(projectParent, "*.sln", SearchOption.AllDirectories)
For Each path As String In paths
Dim cmbItem As New ProjectComboItem
Dim fi As FileInfo = New FileInfo(path)
cmbItem.Display = fi.Name
cmbItem.ProjectPath = fi.FullName
ProjectComboBox.Items.Add(cmbItem)
Next
End Sub
在需要时获取完整路径:
Private Sub OpenButton_Click(sender As Object, e As EventArgs) Handles OpenButton.Click
Try
If Not ProjectComboBox.SelectedItem Is Nothing Then
Dim cmbItem As ProjectComboItem = DirectCast(ProjectComboBox.SelectedItem, ProjectComboItem)
Process.Start(cmbItem.ProjectPath)
End If
Catch ex As Exception
MessageBox.Show(String.Concat("An error occurred: ", ex.Message))
End Try
End Sub