在ContextMenuStrip中复制ContextMenu构造函数

时间:2012-05-30 14:44:21

标签: c# winforms contextmenu contextmenustrip

根据我的研究和理解,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));

enter image description here

我不确定我是否遗漏了一些简单的内容,但如何使用ContextMenuStrip实现类似的功能呢? ToolStripMenuItem没有重载的构造函数,它允许您添加自己的数组以形成子菜单。还没有一种方法可以根据从ContextMenuStrip中选择特定项目索引来添加项目,例如:

 notifyIcon.ContextMenuStrip.Items["Clear"].Add

有一个构造函数允许你实例化一个带有ToolStripItem数组的子菜单,但它是一个抽象类,所以你不能直接调用它

思考?或者我没有看到森林穿过树林。

1 个答案:

答案 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;