То есть вы хотите создать подменю, как на скриншоте?Для этого вам необходимо:
- Хранить список недавно использованных файлов где-нибудь.Это может быть реестр или просто текстовый файл, который я сейчас сделаю, чтобы упростить его.
- Узнайте, как создавать элементы меню во время выполнения, а не в конструкторе.
1.Сохраните MRU в файле
Возможно, вы уже объявили личное поле для хранения вашего MRU, верно?
private List<string> _mru = new List<string>();
Каждый раз, когда кто-то открывает файл, вы добавляете этот файл вначало MRU, верно?
_mru.Insert(0, fullFilePath);
Теперь, конечно, когда приложение закрывается, вам нужно сохранить этот MRU в файл.Давайте сделаем это в форме Form FormClosed .Дважды щелкните по событию FormClosed в свойствах и напишите некоторый код, который выглядит примерно так:
var appDataPath = Application.UserAppDataPath;
var myAppDataPath = Path.Combine(appDataPath, "MyApplication");
var mruFilePath = Path.Combine(myAppDataPath, "MRU.txt");
File.WriteAllLines(mruFilePath, _mru);
Теперь мы сохранили MRU в файле.Теперь, очевидно, когда приложение запускается, нам нужно снова загрузить его, поэтому сделайте что-то подобное в событии Load формы:
var appDataPath = Application.UserAppDataPath;
var myAppDataPath = Path.Combine(appDataPath, "MyApplication");
var mruFilePath = Path.Combine(myAppDataPath, "MRU.txt");
if (File.Exists(mruFilePath))
_mru.AddRange(File.ReadAllLines(mruFilePath));
2.Создайте пункты меню
Теперь, когда _mru
содержит пути к файлам, которые мы хотим видеть в нашем меню, нам нужно создать новый пункт меню для каждого.Здесь я буду предполагать, что у вас уже есть пункт меню в меню Файл (пункт «Недавно использованный» на скриншоте) и что он называется mnuRecentlyUsed
, и что нам нужен толькодля создания подпунктов:
foreach (var path in _mru)
{
var item = new ToolStripMenuItem(path);
item.Tag = path;
item.Click += OpenRecentFile;
mnuRecentlyUsed.DropDownItems.Add(item);
}
Теперь все, что нам нужно, - это метод, который фактически открывает файл, который я назвал OpenRecentFile
:
void OpenRecentFile(object sender, EventArgs e)
{
var menuItem = (ToolStripMenuItem) sender;
var filepath = (string) menuItem.Tag;
// Proceed to open the file
// ...
}
Отказ от ответственности
Пожалуйста, не используйте этот код, если вы не понимаете его и не уверены, что он написан так, как вы хотели.Если нужно сделать что-то немного другое, я уверен, что вы можете внести необходимые изменения самостоятельно.
Кроме того, я уверен, что вы заметили, что вышеупомянутое не обновляет подменю, покаПрограмма запущена.Если вы понимаете, как работает приведенный выше код, тогда я уверен, что вы сможете сами все остальное выяснить.