Как мне создать MRU в V 2010Express C # самым простым способом? - PullRequest
2 голосов
/ 20 августа 2010

Прежде всего, я новичок в программировании на C #, и мне нужно как можно быстрее создать простой MRU.

Что ж, я пытался просмотреть некоторые онлайн-примеры, но, тем не менее, я нашел, что они слишком запутанные ...

Так может ли кто-нибудь создать раздел «Недавно использованные» в toolstripmenuitem, не вдаваясь в эти сложные коды ??

Например, я не смогу понять это ...

Ключ реестра:

KEY_CURRENT_USER\Software\Microsoft\VCExpress\9.0\FileMRUList

Код:

Application.UserAppDataRegistry.DeleteSubKey("MRU", false);
RegistryKey appKey = Application.UserAppDataRegistry.CreateSubKey("MRU");

dictionary

microsoft.win32

Мне понадобится только что-нибудь простое, как показано на этой ссылке ниже http://www.codeproject.com/KB/menus/MRUHandler.aspx

Ответы [ 2 ]

8 голосов
/ 20 августа 2010

То есть вы хотите создать подменю, как на скриншоте?Для этого вам необходимо:

  • Хранить список недавно использованных файлов где-нибудь.Это может быть реестр или просто текстовый файл, который я сейчас сделаю, чтобы упростить его.
  • Узнайте, как создавать элементы меню во время выполнения, а не в конструкторе.

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
    // ...
}

Отказ от ответственности

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

Кроме того, я уверен, что вы заметили, что вышеупомянутое не обновляет подменю, покаПрограмма запущена.Если вы понимаете, как работает приведенный выше код, тогда я уверен, что вы сможете сами все остальное выяснить.

0 голосов
/ 08 ноября 2013

http://www.codeproject.com/Tips/680088/Recent-Items-Tool-Strip-Menu-Item

Этот проект делает именно то, что вы хотите

...