添加到“;打开最近的文件”;

本文关键字:文件 最近 添加 | 更新日期: 2023-09-27 18:28:43

如何将点击事件添加到新添加的菜单项中?以下是我迄今为止所做的工作。显然我的方式很业余,那么还有什么更好的方式呢?

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]);                    
}

添加到“;打开最近的文件”;

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<>类。

沿着这些线应该可以完成

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
}