我想在上下文菜单中获取点击的项目。我从网上找到的代码中得到以下代码,但我对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;
}
答案 0 :(得分:0)
在这种情况下,sender
是ContextMenuStrip
,无法将其投放到MenuItem。
您想要的是ToolStripItemClickedEventArgs
所以:
string menuText = e.ClickedItem.Text;
您将收到点击的ToolStripItem
答案 1 :(得分:0)
你在搅拌东西。 " Strip"家人(ContextMenuStrip
,ToolStripItem
,ToolStripMenuItem
...)替换旧的ContextMenu
/ MenuItem
...内容(为了向后兼容仍然存在)
此处的广告投放失败,因为它不是MenuItem
,也不是ToolStripMenuItem
,而是事件的来源:ContextMenuStrip
。
如果你想要的是实际点击项目的文本,你应该在这里使用事件参数ClickedItem
的{{1}}属性;正如马克的答案所述
注意e
返回ClickedItem
(ToolStripMenuItem继承自)