检查在上下文菜单条中单击了哪个子菜单项
网格控件中有ContextMenuStrip。
我把它命名为GridContextMenu。
GridContextMenu使用以下代码填充4-5个项目:
gridcontextMenu.Items.Add(new ToolStripMenuItem { Name = Plants, Text = Plants, Tag = Plants, Width = 100, Image = }); gridcontextMenu.Items.Add(new ToolStripMenuItem { Name = Animals, Text = Animals, Tag = Animals, Width = 100, Image = });
对于工具条中的动物菜单,我按以下方式添加子菜单
(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) { }
如何在这个事件中检查哪个动物子菜单被选中了? 请分享答案。
你可以这样做:
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; . ... } }
如果您应该将应用程序本地化,则可以使用Tag
来实现此目的。 此外, Tag
是一个对象,因此您可以在其中放置任何数据。 例如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; ... } }
private void SubmenuItem_Click(object sender, EventArgs e) { string clickedItemName=e.ClickedItem.Text; }
当我发现其他答案都没有在这里工作时,我去挖掘并找到了合适的解决方案。 这可能仅适用于.NET Framework 4+,但这是我发现的工作方式。
实质上, ContextMenuStrip
控件中的ItemClicked
事件在引发事件时将自身作为发送者和ToolStripItemClickedEventArgs
对象传递。 由于无法从ContextMenuStrip本身获取单击的项目,获取此信息的唯一方法是询问ToolStripItemClickedEventArgs
对象,并且单击的项目作为ToolStripItem
对象驻留在那里。 然后,可以根据需要使用它来提取要在if / switch语句中使用的选项的名称。 见下文:
要配置EventHandler:
... contextMenuStrip1.ItemClicked += OnContextMenuItem_Clicked; ...
要处理事件并检索所单击项目的文本:
private void OnContextMenuItem_Clicked(object sender, ToolStripMenuItemClickedEventArgs e) { ToolStripItem clickedItem = e.ClickedItem; string itemName = clickedItem.Text; ... }
希望这有助于将来寻找这个答案:)