无法将ToolStripItem强制转换为MenuItem
本文关键字:转换 MenuItem ToolStripItem | 更新日期: 2023-09-27 18:01:09
我正在尝试获取上下文菜单上单击的项目。我从网上找到的代码派生出以下代码,但我对ToolStripMenu
、ContextMenu
和MenuItem
有点困惑。据我所知,这似乎是获得所选菜单项的正确方法,但似乎对我不起作用。
右键单击DataGrid
行时,我会创建一个上下文菜单。
在单击的事件中,我将发件人强制转换为MenuItem
。在调试器中,发送方对这两个项看起来很好,但var mi = sender as MenuItem
只是返回null。请问我做错了什么?
ContextMenuStrip my_menu = new ContextMenuStrip();
int position_xy_mouse_row = dataGridView1.HitTest(e.X, e.Y).RowIndex;
if (position_xy_mouse_row >= 0
{
DataGridViewRow selectedRow = dataGridView1.Rows[position_xy_mouse_row];
dataGridView1.CurrentCell = dataGridView1.Rows[position_xy_mouse_row].Cells[0];
my_menu.Items.Add(new ToolStripMenuItem
{
Name = "Delete",
Text = "Delete",
Tag = "Delete"
});
my_menu.Items.Add(new ToolStripMenuItem
{
Name = "Update",
Text = "Update",
Tag = "Update"
});
my_menu.Show(dataGridView1, new Point(e.X, e.Y));
my_menu.ItemClicked += new ToolStripItemClickedEventHandler(my_menu_ItemClicked);
}
private void my_menu_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
var mi = sender as MenuItem;
string menuText = mi.Text;
}
在这种情况下,sender
是不能转换为MenuItem的ContextMenuStrip
。
您想要的是ToolStripItemClickedEventArgs
中实际点击的项目
因此:
string menuText = e.ClickedItem.Text;
您将从单击的ToolStripItem
收到文本
你在混东西。"Strip"系列(ContextMenuStrip
、ToolStripItem
、ToolStripMenuItem
…(取代了旧的ContextMenu
/MenuItem
。。。东西(仍然存在以向后兼容(
这里强制转换失败,因为它不是MenuItem
,也不是ToolStripMenuItem
,而是事件的源:ContextMenuStrip
。
如果您想要的是实际单击项目的文本,则应在此处使用事件参数e
的ClickedItem
属性;正如马克的回答中所说
注意ClickedItem
返回一个ToolStripItem
(ToolStripMenuItem从中继承(