Vb.net ListView函数-如何让代码;记住;设置目录?

Vb.net ListView函数-如何让代码;记住;设置目录?,vb.net,listview,Vb.net,Listview,所以我正试图用VB.Net为其他程序制作这个管理系统 我问了另一个问题,但太模糊了,所以我还是被卡住了 我得到了一个列表视图(建议我使用它来代替Listbox),它在我在代码中选择的文件夹中查找一组文件和扩展名(静态,因此每次都会找到相同的文件夹) 我希望能够按“设置…”(我已经创建并放置了一个按钮)打开文件对话框,选择一个文件夹。按OK时,“应用程序”会记住您所在的文件夹/目录,因此您无需每次都设置文件夹。 此外,您甚至可以关闭应用程序,关闭PC,但代码仍会记住您所在的目录/文件夹,以供以后使

所以我正试图用VB.Net为其他程序制作这个管理系统

我问了另一个问题,但太模糊了,所以我还是被卡住了

我得到了一个列表视图(建议我使用它来代替Listbox),它在我在代码中选择的文件夹中查找一组文件和扩展名(静态,因此每次都会找到相同的文件夹)

我希望能够按“设置…”(我已经创建并放置了一个按钮)打开文件对话框,选择一个文件夹。按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能够找到我需要查找的具有多个扩展名的文件

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
所以,在Set按钮完成它的工作,“记住”您在哪个目录中按下OK之后,它会将代码添加到更新按钮代码中,因此通过按下Update,它的操作与之前相同


有什么好的建议吗?

您应该在设置(项目->属性->设置)中添加一个名为
LastUsedPath
(或您喜欢的任何内容)的新条目。此设置应为字符串类型和用户范围。您还可以设置指向应用程序文件夹的初始值。(“\”)

现在在代码中,每次单击按钮
updateButtonGame
都会读取该值,并将
FolderBrowserDialog
属性设置为该值。
通过这种方式,对话框最初会打开到此文件夹,然后,如果用户确认选择或更改到另一个目录,您可以将设置更改为新路径,并将其存储到下一次

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
我还建议将file的枚举更改为使用传递的变量,而不是对FolderBrowserDialog的引用

For Each fileInfo in From f In New IO.DirectoryInfo(folderPath).EnumerateFiles _
          Where f.Extension = ....
还请注意,我没有使用GetFiles,而是改为EnumerateFiles。这更好,因为它允许启动枚举,而无需在内存中加载整个FileInfo集合
见第节

编辑 最后一个示例是替换填充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

感谢回复Steve,我已经完成了第一部分(属性中的LastUsedPath),但是当我将代码添加到我的代码中时,我会得到多个错误代码,不同代码下的红线等等;为了更好地理解我的意思。我只是想一步一步来。知道我该怎么做吗?等等,我已经用C#做了这个,需要用VB测试。我想我已经为VB.NET确定了答案。看这篇文章,更新后的代码工作得更好。“fdb”代码仍然存在问题。给了我红线。我有来自VisualStudio本身的5个“修复”。生成方法存根、生成属性存根、生成字段、生成类或生成新类型..请在VB.NET WinForms上搜索一些教程。这确实超出了最初问题的范围。如果你还没有完成,我建议你读一读