检查其子菜单项被点击右键菜单条(Check which submenu item was click

2019-07-04 07:23发布

有在网格控件的ContextMenuStrip。

我已经将其命名为GridContextMenu。

所述GridContextMenu被填充有4 - 使用以下代码5项:

 gridcontextMenu.Items.Add(new ToolStripMenuItem
                        {
                            Name = Plants,
                            Text = Plants,
                            Tag = Plants,
                            Width = 100,
                            Image = <image source is put here>
                        });

gridcontextMenu.Items.Add(new ToolStripMenuItem
                        {
                            Name = Animals,
                            Text = Animals,
                            Tag = Animals,
                            Width = 100,
                            Image = <image source is put here>
                        });

在工具条动物菜单,我以下面的方式加入的子菜单

(gridcontextMenu.Items[1] as ToolStripMenuItem).DropDownItems.Add("Tiger", image_source, new EventHandler(SubmenuItem_Click));
(gridcontextMenu.Items[1] as ToolStripMenuItem).DropDownItems.Add("Lion", image_source, new EventHandler(SubmenuItem_Click));
(gridcontextMenu.Items[1] as ToolStripMenuItem).DropDownItems.Add("Elephant", image_source, new EventHandler(SubmenuItem_Click));

在SubmenuItem_Click事件处理程序,我需要知道单击的动物子菜单。

如何实现这一目标?

目前,我有在以下方式的事件处理程序的代码:

private void SubmenuItem_Click(object sender, EventArgs e)
{
}

如何检查条件在此事件中是哪种动物的子菜单中选择? 请分享答案。

Answer 1:

你可以这样做:

private void SubmenuItem_Click(object sender, EventArgs e)
{
    var clickedMenuItem = sender as MenuItem; 
    var menuText = clickedMenuItem.Text;

    switch(menuText) {
        case "Tiger":
           break;

        case "Lion":
          break;
         . ...
    }
}


Answer 2:

您可以使用Tag的情况下,为了这个目的,当你要本地化您的应用程序。 此外Tag是一个对象,所以你可以把任何数据tapy那里。 例如Enum类型。

private void SubmenuItem_Click(object sender, EventArgs e)
{
    var clickedMenuItem = sender as MenuItem; 
    EnumType item = (EnumType)clickedMenuItem.Tag;

    switch(item) {
        case TigeItem:
           break;
        case LionItem:
          break;
         ...
    }
}


Answer 3:

当我发现没有其他的答案在这里工作,我去挖掘和发现的妥善解决。 这可能仅在.NET框架已经适用4+但这里是我找到工作。

从本质上讲, ItemClicked在事件ContextMenuStrip控制本身传递发送者和一个ToolStripItemClickedEventArgs当引发事件对象。 正如你无法获得从自身的ContextMenuStrip被点击的项目,以获得该信息的唯一方法是询问ToolStripItemClickedEventArgs对象和点击项目驻留在那里作为一个ToolStripItem对象。 这可以被用来提取选项的名称在if / switch语句适合使用。 见下文:

要配置事件处理程序:

...
contextMenuStrip1.ItemClicked += OnContextMenuItem_Clicked;
...

为了处理事件,并获取点击的项目的文本:

private void OnContextMenuItem_Clicked(object sender, ToolStripMenuItemClickedEventArgs e)
{
    ToolStripItem clickedItem = e.ClickedItem;
    string itemName = clickedItem.Text;
    ...
}

希望这可以帮助别人寻找这个答案在未来:)



Answer 4:

private void SubmenuItem_Click(object sender, EventArgs e)
{        
    string clickedItemName=e.ClickedItem.Text;
}


文章来源: Check which submenu item was clicked in context menu strip