如何正确转换ContextMenuStrip C#
我已经阅读了好几个小时了,现在我想知道如何在VisualStudio2012中使用C#正确地转换上下文菜单条。我构建了一个小的测试应用程序,向您展示我正在努力实现的目标。这是一个屏幕截图 我已将关联菜单条指定给这两个控件。我可以返回引发MenuStrip的控件,但是如果我添加另一个菜单项,如本例(Test),我会得到“cantcast”错误。下面是我正在尝试使用的代码如何正确转换ContextMenuStrip C#,c#,casting,contextmenustrip,C#,Casting,Contextmenustrip,我已经阅读了好几个小时了,现在我想知道如何在VisualStudio2012中使用C#正确地转换上下文菜单条。我构建了一个小的测试应用程序,向您展示我正在努力实现的目标。这是一个屏幕截图 我已将关联菜单条指定给这两个控件。我可以返回引发MenuStrip的控件,但是如果我添加另一个菜单项,如本例(Test),我会得到“cantcast”错误。下面是我正在尝试使用的代码 private void testToolStripMenuItem_Click(object sender, EventAr
private void testToolStripMenuItem_Click(object sender, EventArgs e)
{
var item = (ToolStripMenuItem)sender;
var menu = (ContextMenuStrip)item.Owner;
MessageBox.Show(menu.SourceControl.Name);
}
根据顶部可能已经回答的问题链接,我终于能够找到答案。我相信这样做无论如何要干净和简单得多。我要做的是为ContextMenuStrip.Opening设置一个事件。在该事件上设置源代码管理。这是代码
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private PictureBox p;
private void testToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show(p.Name);
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
{
p = ((ContextMenuStrip)sender).SourceControl as PictureBox;
}
}
使用调试器查看对象的实际类型。在第一行设置断点,并准确检查
sender
是什么。我相信这一定是因为“Test”的所有者不是ContextMenuStrip,而是另一个MenuItem。它应该是ToolStripItem
,可能是也可能不是ToolStripMenuItem