我的应用程序顶部有一个菜单。
菜单中的第一项(文件)具有通常的新建、打开...、保存、另存为...以及打开最近。最后一个是 ToolStripDropDown,显示最近使用的文件名列表。
我想在上下文菜单中有一项的文件名中添加一个右键单击上下文菜单(不是子菜单),以从列表中删除右键单击的文件名。
我将文件名加载到菜单中,如下所示:
private void mnuFile_DropDownOpened(object sender, EventArgs e)
{
foreach (string fn in mru_files)
{
ToolStripMenuItem p = new ToolStripMenuItem(fn);
p.Click += fn_clicked;
p.MouseDown += fn_MouseDown;
openRecentToolStripMenuItem.DropDownItems.Add(p);
}
}
主要部分工作正常 -fn_clicked
当我单击文件时调用该方法,它将执行它应该执行的操作。
在MouseDown
处理程序中,我可以从列表中删除文件,如下所示:
private void fn_MouseDown(object sender, MouseEventArgs e)
{
ToolStripMenuItem toolStripMenuItem = sender as ToolStripMenuItem;
if (toolStripMenuItem != null
&& e.Button == System.Windows.Forms.MouseButtons.Right
&& mru_files.Find(x => x == toolStripMenuItem.Text) != null)
{
mru_files.Remove(toolStripMenuItem.Text);
}
}
但这不显示菜单。
如果我向表单添加上下文菜单,然后执行
mnu_ctxMRUitem.Show(xyz, e.X, e.Y);
我没有删除文件,而是在正确的位置获得了上下文菜单,但是带有文件列表的原始菜单已经消失。
如何在右键单击菜单项时显示上下文菜单,而不会使主菜单消失。