Добавить "открыть последние файлы" - PullRequest
2 голосов
/ 23 марта 2012

Как я могу добавить событие клика во вновь добавленный пункт меню? Ниже то, что я сделал до сих пор. Очевидно мой путь очень любительский, так что может быть лучше?

Collection<string> recent_cases = new Collection<string>();

recent_cases.Insert(0, System.IO.Path.GetFileNameWithoutExtension(ofd.FileName));

if (recent_cases.Count == 6)
{
    recent_cases.RemoveAt(5);
}

for (int i = 0; i < recent_cases.Count; ++i)
{
    MenuItem_OpenRecent.Items.Add(recent_cases[i]);                    
}

Ответы [ 2 ]

1 голос
/ 23 марта 2012

MenuItem обычно вызывает Команду, а не прослушивает события щелчка.

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

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

Итак:

void OnNewFilenameAdded(string filename)
{
    var item = new MenuItem();
    item.Command = _OpenFileCommand;
    item.Header  = filename;
    item.CommandParameter = filename;
    MenuItem_OpenRecent.Items.Insert(0, item);

    if (MenuItem_OpenRecent.Items.Count == 6)
        MenuItem_OpenRecent.Items.RemoveAt(5);
}

Если вы действительно хотите сохранить отдельную коллекцию имен файлов, например, если вы собираетесь реализовать это с MVVM, взгляните на класс Queue<>.

0 голосов
/ 23 марта 2012

Что-то в этом духе должно сработать

for (int i = 0; i < recent_cases.Count; ++i)
{
    var mi= new MenuItem();
    mi.Header = recent_cases[i];
    mi.Click += new EventHandler(MenuItem_Click);
    MenuItem_OpenRecent.Items.Add(mi);                    
}


....


void MenuItem_Click(object sender, EventArgs e)
{
    var mi= sender as MenuItem;
    //Do stuff with your file
}
...