首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查上下文菜单条中单击的子菜单项

检查上下文菜单条中单击的子菜单项
EN

Stack Overflow用户
提问于 2012-11-30 15:31:15
回答 5查看 33.4K关注 0票数 4

网格控件中有一个ContextMenuStrip。

我已将其命名为GridContextMenu。

使用以下代码用4-5个项目填充GridContextMenu:

代码语言:javascript
复制
 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>
                        });

对于工具条中的动物菜单,我通过以下方式添加子菜单

代码语言:javascript
复制
(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事件处理程序中,我需要知道哪个动物子菜单被单击了。

如何做到这一点?

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

代码语言:javascript
复制
private void SubmenuItem_Click(object sender, EventArgs e)
{
}

在选择了哪一个动物菜单的情况下如何检查?请分享答案。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-11-30 15:44:53

你可以这样做:

代码语言:javascript
复制
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;
         . ...
    }
}
票数 12
EN

Stack Overflow用户

发布于 2012-11-30 16:18:49

在需要本地化应用程序的情况下,可以使用Tag进行本地化。此外,Tag是一个对象,因此您可以在其中放置任何数据磁带。例如Enum类型。

代码语言:javascript
复制
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;
         ...
    }
}
票数 3
EN

Stack Overflow用户

发布于 2018-06-26 21:59:21

当我发现其他答案在这里都不起作用时,我继续挖掘并找到了合适的解决方案。这可能只适用于.NET框架4+,但以下是我发现的工作原理。

本质上,ContextMenuStrip控件中的ItemClicked事件在引发该事件时将其自身作为发送方和ToolStripItemClickedEventArgs对象进行传递。由于不能从ContextMenuStrip本身获取被单击的项,因此获取此信息的唯一方法是询问ToolStripItemClickedEventArgs对象,被单击的项作为ToolStripItem对象驻留在其中。然后,可以根据需要提取要在if/switch语句中使用的选项的名称。如下所示:

要配置EventHandler,请执行以下操作:

代码语言:javascript
复制
...
contextMenuStrip1.ItemClicked += OnContextMenuItem_Clicked;
...

要处理事件并检索单击项的文本,请执行以下操作:

代码语言:javascript
复制
private void OnContextMenuItem_Clicked(object sender, ToolStripMenuItemClickedEventArgs e)
{
    ToolStripItem clickedItem = e.ClickedItem;
    string itemName = clickedItem.Text;
    ...
}

希望这对将来寻找这个答案的人有所帮助:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13640800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档