所以我试图使用VB.Net为其他程序制作这个管理系统
我问了另一个问题,但它太模糊了,所以我仍然坚持。
我有一个列表视图(我建议使用而不是列表框)在我的代码中选择的文件夹中找到一组文件和扩展名(静态,因此每次都找到相同的文件夹)
我希望能够按下#34; Set .." (我已创建并放置的按钮)能够打开FileDialog,以选择文件夹。当按下OK时,"应用程序"记住你所在的文件夹/目录,所以你不需要每次都设置文件夹。 此外,您甚至可以关闭应用程序,关闭您的PC,但代码仍然会记住您所在的目录/文件夹,以供日后使用。
Code;
'这里的代码使我的更新按钮能够找到文件夹/目录中的文件。而已。只需刷新列表,因为列表视图在打开表单时为空白。
Private Sub updateButtonGame_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles updateButtonGame.Click
If FolderBrowserDialog1.SelectedPath = "xxxx\xxxx\xxxx" Then
' List files in the folder.
ListFiles(FolderBrowserDialog1.SelectedPath)
End If
End Sub
'这段代码使listview能够找到我需要找到的带有多个Extensions的文件。
Private Sub ListFiles(ByVal folderPath As String)
ListViewGame.Items.Clear()
Dim fi = From f In New IO.DirectoryInfo(FolderBrowserDialog1.SelectedPath).GetFiles().Cast(Of IO.FileInfo)() _
Where f.Extension = ".z64" OrElse f.Extension = ".nds" OrElse f.Extension = ".BIN" OrElse f.Extension = ".smc" OrElse f.Extension = ".ISO" OrElse f.Extension = ".nes" OrElse f.Extension = ".gb"
Order By f.Extension
Select f
For Each fileInfo As System.IO.FileInfo In fi
ListViewGame.Items.Add(fileInfo.Name)
Next
End Sub
所以在设置按钮完成它的工作后,"记住"您按下了什么目录,它将代码添加到更新按钮代码,因此通过按更新,它会像以前一样。
有什么好的建议吗?
答案 0 :(得分:1)
您应该添加一个名为LastUsedPath
的新条目(或您喜欢的任何内容),将您的设置(项目 - >属性 - >设置)添加到您的设置中。此设置应为字符串和用户范围类型。您还可以设置指向应用程序文件夹的初始值。 ( “\”)
现在在代码中,每当您点击按钮updateButtonGame
时,您都会读取此值并将FolderBrowserDialog
SelectedPath属性设置为此值。
通过这种方式,对话框最初打开到此文件夹,然后,如果用户确认选择或更改到另一个目录,您可以将设置更改为新路径并将其存储下次。
using fbd = new FolderBrowserDialog()
fbd.SelectedPath = My.Settings.LastUsedPath
If fbd.ShowDialog() = DialogResult.OK Then
ListFiles(fbd.SelectedPath)
My.Settings.LastUsedPath = fbd.SelectedPath
My.Settings.Save()
End If
End Using
我建议更改文件的枚举以使用传递的变量,而不是对FolderBrowserDialog的引用。
For Each fileInfo in From f In New IO.DirectoryInfo(folderPath).EnumerateFiles _
Where f.Extension = ....
另请注意,我已更改为EnumerateFiles,而不是使用GetFiles。这是更好的,因为它允许启动枚举而无需在内存中加载整个FileInfo集合
请参阅EnumerateFiles remarks部分
修改强> 我的最后一个例子是填充ListView的FOR NEXT的替代品。你使用我的方法或你的。
Private Sub ListFiles(ByVal folderPath As String)
For Each fi In From f In New IO.DirectoryInfo(folderPath).EnumerateFiles _
Where f.Extension = ".z64" OrElse f.Extension = ".nds" _
OrElse f.Extension = ".BIN" OrElse f.Extension = ".smc" _
OrElse f.Extension = ".ISO" OrElse f.Extension = ".nes" _
OrElse f.Extension = ".gb"
Order By f.Extension
Select f
' Remove this line
' For Each fileInfo As System.IO.FileInfo In fi
ListView1.Items.Add(fi.Name)
Next
End Sub