我正在尝试在上下文菜单上获得单击的项目。我从网上找到了以下代码,但我有点困惑于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;
}发布于 2016-08-05 09:59:12
本例中的sender是不能传递给MenuItem的ContextMenuStrip。
您想要的是ToolStripItemClickedEventArgs中的实际单击项。
因此,在以下方面:
string menuText = e.ClickedItem.Text;您将从单击的ToolStripItem接收文本。
发布于 2016-08-05 10:05:56
你在混东西。“条状”家族(ContextMenuStrip,ToolStripItem,ToolStripMenuItem.)取代旧的ContextMenu/MenuItem..。东西(为了向后兼容性仍然存在)
在这里,强制转换失败是因为它不是MenuItem,也不是ToolStripMenuItem,而是事件的来源:ContextMenuStrip。
如果您想要的是实际单击项的文本,那么您应该在这里使用事件参数的ClickedItem属性e;正如Mark‘should中所述。
注ClickedItem返回一个ToolStripItem ( ToolStripMenuItem从它继承)
https://stackoverflow.com/questions/38786123
复制相似问题