【问题标题】:Replicating ContextMenu constructor in ContextMenuStrip在 ContextMenuStrip 中复制 ContextMenu 构造函数
【发布时间】:2012-06-04 19:51:02
【问题描述】:

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

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

【问题讨论】:

    标签: c# winforms contextmenu contextmenustrip


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      相关资源
      最近更新 更多