根据我的研究和理解,ContextMenuStrip应该是ContextMenu的继承者,并且本着保持我的代码更新和声音的精神,我开始替换ContextMenu的一个这样的实例。
以前,为了给MenuItem提供一个带有点击处理程序的项目的子菜单,我做了类似的事情:
MenuItem[] clearMenu = {
new MenuItem("All", clear_all_click),
new MenuItem("Text", clear_text_click),
new MenuItem("Images", clear_images_click),
new MenuItem("Audio", clear_audio_click)
};
notifyIcon.ContextMenu.MenuItems.Add(new MenuItem("Clear", clearMenu));
我不确定我是否遗漏了一些简单的内容,但如何使用ContextMenuStrip实现类似的功能呢? ToolStripMenuItem没有重载的构造函数,它允许您添加自己的数组以形成子菜单。还没有一种方法可以根据从ContextMenuStrip中选择特定项目索引来添加项目,例如:
notifyIcon.ContextMenuStrip.Items["Clear"].Add
有一个构造函数允许你实例化一个带有ToolStripItem数组的子菜单,但它是一个抽象类,所以你不能直接调用它
思考?或者我没有看到森林穿过树林。
答案 0 :(得分:1)
你可以完全按照自己的意愿行事。但要通过keyname访问,您必须设置名称:
ToolStripItem[] newItems = {
new ToolStripMenuItem("All", null, DoThis),
new ToolStripMenuItem("Text", null, DoThis)
};
this.contextMenuStrip1.Items.Add(new ToolStripMenuItem("Clear", null, newItems) {Name="Clear"});
var clearItem = this.contextMenuStrip1.Items["Clear"] as ToolStripMenuItem;