.net 什么';在WinForms中为上下文菜单动态选择菜单项的正确方法是什么?
我正在尝试为“链接”到主菜单项的控件创建上下文菜单。有两个始终存在的固定菜单项和可能需要出现在菜单上的任意数量的附加菜单项 我试图通过保持对固定菜单项和动态菜单项列表的类级引用来解决这个问题。我通过清除当前项目列表,然后将适当的项目添加到菜单中,来处理两个菜单的打开事件。这对主菜单很有效,但上下文菜单的行为很奇怪 主要问题似乎是,在弹出.net 什么';在WinForms中为上下文菜单动态选择菜单项的正确方法是什么?,.net,winforms,menu,.net,Winforms,Menu,我正在尝试为“链接”到主菜单项的控件创建上下文菜单。有两个始终存在的固定菜单项和可能需要出现在菜单上的任意数量的附加菜单项 我试图通过保持对固定菜单项和动态菜单项列表的类级引用来解决这个问题。我通过清除当前项目列表,然后将适当的项目添加到菜单中,来处理两个菜单的打开事件。这对主菜单很有效,但上下文菜单的行为很奇怪 主要问题似乎是,在弹出打开时,菜单已经决定了要显示哪些项目。此表格表明: using System.Collections.Generic; using System.Componen
打开
时,菜单已经决定了要显示哪些项目。此表格表明:
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public class DemoForm : Form
{
private List _items;
public DemoForm()
{
var contextMenu = new ContextMenuStrip();
contextMenu.Opening += contextMenu_Opening;
_items = new List();
_items.Add(new ToolStripMenuItem("item 1"));
_items.Add(new ToolStripMenuItem("item 2"));
this.ContextMenuStrip = contextMenu;
}
void contextMenu_Opening(object sender, CancelEventArgs e)
{
var menu = sender as ContextMenuStrip;
if (menu != null)
{
foreach (var item in _items)
{
menu.Items.Add(item);
}
}
}
}
}
首次右键单击表单时,不会显示任何内容。第二次,菜单按预期显示。是否引发了另一个我可以更新项目的事件?动态选择菜单项是一种不好的做法吗
(注意:这是我开始为需要此类功能的人制作的一个示例,我很好奇这有多困难,所以我无法提供有关为什么可以这样做的详细信息。此人希望“链接”将主菜单项添加到上下文菜单,并且由于菜单项只能是单个菜单的子菜单,因此这似乎是一种合理的方法。欢迎提供任何其他方法建议。)您可以在控件的鼠标向下事件期间计算出这些项。检查是否也是鼠标右键。谢谢!从NotifyIcon动态生成的ContextMenuStrip也有类似的问题,这解决了我使用ContextMenuStrip打开事件处理程序时出现的不稳定行为。