ListView函数 - 如何让代码“记住”设置目录?

时间:2014-09-13 12:21:07

标签: vb.net listview

所以我试图使用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

所以在设置按钮完成它的工作后,"记住"您按下了什么目录,它将代码添加到更新按钮代码,因此通过按更新,它会像以前一样。

有什么好的建议吗?

1 个答案:

答案 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