网格控件中有一个ContextMenuStrip。
我已将其命名为GridContextMenu。
使用以下代码用4-5个项目填充GridContextMenu:
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)
{
}在选择了哪一个动物菜单的情况下如何检查?请分享答案。
发布于 2012-11-30 15:44:53
你可以这样做:
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;
. ...
}
}发布于 2012-11-30 16:18:49
在需要本地化应用程序的情况下,可以使用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;
...
}
}发布于 2018-06-26 21:59:21
当我发现其他答案在这里都不起作用时,我继续挖掘并找到了合适的解决方案。这可能只适用于.NET框架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;
...
}希望这对将来寻找这个答案的人有所帮助:)
https://stackoverflow.com/questions/13640800
复制相似问题