Создайте список недавно использованных файлов (MRU) в C#

В списке MRU отображаются файлы, которые программа использовала совсем недавно в меню. Если пользователь выбирает файл из списка, программа снова открывает этот файл.

В этом примере создается класс MruList, который программа может использовать для упрощения предоставления списка MRU. Этот пример довольно сложен, кроме того многие его части интересны, поэтому я собираюсь описать их все, разделяя на следующие сегменты.

Инициализация

Переменная ApplicationName содержит имя приложения. Это используется для хранения информации о файлах в реестре.

В переменной NumFiles содержится количество файлов, которые может храниться в списке, а не количество файлов, которые оно фактически удерживает в то время. Большинство программ устанавливают это значение равным 4, поэтому список MRU может содержать не более 4 файлов.

Список FileInfos содержит объекты FileInfo, описывающие файлы, находящиеся в списке. (Я использую объекты FileInfo, потому что они легко сохраняют полный путь файла и краткое имя файла. Вместо этого вы можете использовать какой-то другой тип объекта, если хотите, чтобы список MRU представлял что-то другое, кроме файлов. Например, если вы хотите получить список недавно используемых инженерных диаграмм, вы можете захотеть, чтобы в этом списке содержались объекты, в которых хранятся заголовки диаграмм, расположение файлов и другие данные.

Переменная MyMenu содержит ссылку на меню программы, которая должна отображать список. Переменные Separator и MenuItems содержат ссылки на элементы меню, созданные MruList.

Делегат FileSelectedEventHandler определяет тип события FileSelected, которое MruList повышает, когда пользователь выбирает файл из списка.

В следующем коде показан конструктор класса, который инициализирует список.

Конструктор сохраняет имя приложения, меню, которое должно содержать элементы списка, и количество файлов, которые может содержать список. Затем он создает новый список FileInfos.

Затем конструктор создает разделитель и пункты меню, которые могут потребоваться для отображения позже. Он заканчивается вызовом LoadFiles для загрузки сохраненных файлов из реестра и ShowFiles для отображения правильных пунктов меню.

Следующий код показывает метод LoadFiles.

Метод LoadFiles использует метод GetSetting класса RegistryTools для загрузки имен файлов, хранящихся в реестре. Следующий код показывает метод GetSetting.

Метод GetSetting открывает раздел реестра текущего пользователя, получает подраздел, названный в честь приложения, а затем получает запрошенный параметр, который в этом случае является файловым путем.

После того, как конструктор загрузил сохраненную информацию о файле из реестра, он вызывает следующий метод ShowFiles для подготовки элементов меню для использования.

Метод ShowFiles начинается с отображения разделителя, если в списке есть какие-либо файлы. Затем он перебирает объекты FileInfo в коллекции FileInfos. Для каждого объекта он устанавливает соответствующее пункту меню свойство текста, видимости и тега. Он также прикрепляет обработчик события File_Click к событию Click элемента меню. (Сначала он удаляет любой ранее установленный обработчик событий, поэтому обработчик события не устанавливается дважды).

Затем код скрывает любые пункты меню, которые не нужны.

Следующий код показывает метод SaveFiles, который сохраняет текущий список файлов в реестре.

Метод SaveFiles удаляет все существующие записи реестра, а затем сохраняет полные пути текущих файлов.

Добавление и удаление файлов

Когда основная программа открывает файл или сохраняет вновь созданный файл, он должен вызывать метод AddFile MruLists, показанный в следующем коде.

Этот метод вызывает метод RemoveFileInfo для удаления файла из списка FileInfos, а затем вставляет файл в начало списка. Это не позволяет списку содержать дубликаты. Затем, если в списке содержится слишком много файлов, код удаляет последний элемент. Метод заканчивается вызовом ShowFiles для обновления пунктов меню и SaveFiles для сохранения текущего списка в реестре.

Следующий код показывает метод RemoveFileInfo.

Этот метод циклически перемещается по элементам файла с конца. Если он находит запись с именем целевого файла, она удаляет эту запись. (Код выполняет поиск по списку задом наперед, поэтому удаление элемента не перенумерует остальные элементы.) Обратите внимание, что код не может просто использовать метод удаления списка, потому что этот метод ищет только сопоставленные объекты FileInfo, а не объекты, которые отличаются, а представляют один и тот же файл.

Метод RemoveFile, показанный в следующем коде, удаляет файл из списка MRU. Основная программа должна вызывать этот метод всякий раз, когда ему нужно удалить файл из списка. Например, если программа пытается открыть файл и не может, большинство программ удаляют этот файл из списка MRU.

Этот метод вызывает RemoveFileInfo для удаления файла из списка. Затем он вызывает ShowFiles для обновления пунктов меню и SaveFiles для обновления реестра.

Управление событиями.

Когда пользователь выбирает файл из списка MRU, выполняется следующий обработчик события File_Click.

Этот метод просто вызывает событие FileSelected, передавая ему объект FileInfo, представляющий выбранный файл.

Использование Mru-списка

В данном примере используется следующий код для определения и инициализации переменной MruList.

Программа определяет переменную MyMruList на уровне формы, поэтому все ее методы могут ее использовать. Обработчик события Load формы инициализирует MruList и регистрирует обработчик события MyMruList_FileSelected для обработки события FileSelected в списке.

Следующий код показывает, как программа пытается открыть файл.

Если файл имеет имя, которое заканчивается на .rtf, программа использует метод LoadFile для управления RichTextBox для загрузки файла в виде файла RTF. Если имя не заканчивается на .rtf, программа загружает файл в виде текста. Если он успешно загружает файл, программа вызывает метод AddLile для MRULIST, чтобы добавить файл в список MRU.

Если программе не удается загрузить файл, она вызывает метод RemoveFile для MRULIST, чтобы удалить файл из списка MRU, и сообщает пользователю, что возникла проблема.

Если пользователь выбирает файл из списка MRU, MruList вызывает событие FileSelected и выполняет следующий обработчик событий.

Этот код просто вызывает предыдущий метод OpenFile для открытия выбранного файла.

Эта программа не имеет команд Сохранить или Сохранить как, но если бы и имела, то она должна бы была вызывать метод AddFile MruList при каждом сохранении нового или переименованного файла.

Источник: csharphelper.com/blog/2012/04/build-a-most-recently-used-file-mru-list-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (3 оценок, среднее: 4,67 из 5)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *