首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法将ToolStripItem强制转换为MenuItem

无法将ToolStripItem强制转换为MenuItem
EN

Stack Overflow用户
提问于 2016-08-05 09:41:35
回答 2查看 734关注 0票数 0

我正在尝试在上下文菜单上获得单击的项目。我从网上找到了以下代码,但我有点困惑于ToolStripMenuContextMenuMenuItem。据我所知,这似乎是获得所选菜单项的正确方法,但似乎对我不起作用。

右键单击DataGrid行时,我会创建一个上下文菜单。

在单击事件中,我将发送方强制转换为MenuItem。在调试器中,发送方看起来对这两个项没有问题,但是var mi = sender as MenuItem只返回null。请问我做错什么了?

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-05 09:59:12

本例中的sender是不能传递给MenuItem的ContextMenuStrip

您想要的是ToolStripItemClickedEventArgs中的实际单击项。

因此,在以下方面:

代码语言:javascript
复制
string menuText = e.ClickedItem.Text;

您将从单击的ToolStripItem接收文本。

票数 0
EN

Stack Overflow用户

发布于 2016-08-05 10:05:56

你在混东西。“条状”家族(ContextMenuStripToolStripItemToolStripMenuItem.)取代旧的ContextMenu/MenuItem..。东西(为了向后兼容性仍然存在)

在这里,强制转换失败是因为它不是MenuItem,也不是ToolStripMenuItem,而是事件的来源:ContextMenuStrip

如果您想要的是实际单击项的文本,那么您应该在这里使用事件参数的ClickedItem属性e;正如Mark‘should中所述。

ClickedItem返回一个ToolStripItem ( ToolStripMenuItem从它继承)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38786123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档