0

根据我的研究和理解,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(s) 数组的子菜单,但它是一个抽象类,因此您不能直接调用它。

想法?还是我不是透过树木看到森林。

4

1 回答 1

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;
于 2012-05-30T18:42:14.847 回答