расположение списка последних файлов vb.net - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу добавить список последних файлов в приложение, которое я пишу. Я думал о добавлении последних файлов в файл xml.

Где должен храниться этот файл? И как это следует вызывать из кода?

Я бы предположил, что xml будет храниться в той же папке, в которой установлено приложение, но не все установят приложение в один и тот же каталог.

Есть ли способ закодировать его таким образом, чтобы он всегда сохранялся в той же папке, в которой будет установлено приложение?

Заранее большое спасибо!

1 Ответ

1 голос
/ 10 апреля 2020

Вот пример использования My.Settings. Требуется открыть страницу Настройки свойств проекта и добавить параметр типа StringCollection с именем RecentFiles, а также ToolStripMenuItem с текстом «Недавние».

Imports System.Collections.Specialized

Public Class Form1

    Private Const MAX_RECENT_FILES As Integer = 10

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        LoadRecentFiles()
    End Sub

    Private Sub LoadRecentFiles()
        Dim recentFiles = My.Settings.RecentFiles

        'A StringCollection setting will be Nothing by default, unless you edit it in the Settings designer.
        If recentFiles Is Nothing Then
            My.Settings.RecentFiles = New StringCollection()
            recentFiles = My.Settings.RecentFiles
        End If

        'Get rid of any existing menu items.
        RecentToolStripMenuItem.DropDownItems.Clear()

        'Add a menu item for each recent file.
        If recentFiles.Count > 0 Then
            RecentToolStripMenuItem.DropDownItems.AddRange(recentFiles.Cast(Of String)().
                                                                       Select(Function(filePath) New ToolStripMenuItem(filePath,
                                                                                                                       Nothing,
                                                                                                                       AddressOf RecentFileMenuItems_Click)).
                                                                       ToArray())
        End If
    End Sub

    Private Sub UpdateRecentFiles(filePath As String)
        Dim recentFiles = My.Settings.RecentFiles

        'If the specified file is already in the list, remove it from its old position.
        If recentFiles.Contains(filePath) Then
            recentFiles.Remove(filePath)
        End If

        'Add the new file at the top of the list.
        recentFiles.Insert(0, filePath)

        'Trim the list if it is too long.
        While recentFiles.Count > MAX_RECENT_FILES
            recentFiles.RemoveAt(MAX_RECENT_FILES)
        End While

        LoadRecentFiles()
    End Sub

    Private Sub RecentFileMenuItems_Click(sender As Object, e As EventArgs)
        Dim menuItem = DirectCast(sender, ToolStripMenuItem)
        Dim filePath = menuItem.Text

        'Open the file using filePath here.
    End Sub

End Class

Обратите внимание, что обработчик событий Load содержит немного кода, чтобы учесть тот факт, что параметр типа StringCollection будет Nothing, пока вы не назначите ему что-то. Если вы не хотите делать это в коде, сделайте следующее.

  1. После добавления настройки щелкните поле Value и нажмите кнопку с многоточием (...) для редактирования. .
  2. Добавьте любой текст в редактор и нажмите OK. Обратите внимание, что было добавлено несколько XML, включающих добавленные вами элементы.
  3. Снова нажмите кнопку редактирования (...) и удалите добавленные элементы. Обратите внимание, что XML остается, но ваши элементы пропали.

Этот код XML приведет к созданию объекта StringCollection при первой загрузке настроек, поэтому нет Вам нужно создать его в коде.

РЕДАКТИРОВАТЬ:

Я проверил это, добавив следующий код:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Using dialogue As New OpenFileDialog
        If dialogue.ShowDialog() = DialogResult.OK Then
            UpdateRecentFiles(dialogue.FileName)
        End If
    End Using
End Sub

Я смог добавить десять файлов в список через этот Button, а затем они начали опускаться в конце списка, как я добавил еще. Если я снова добавлю тот, который уже был в списке, он переместился в начало. Если я закрыл приложение и запустил его снова, список сохранился.

...