我已经阅读了好几个小时,试图弄清楚如何使用C#在Visual Studio 2012中正确地构建Context Menu Strip。我构建了一个小测试应用程序来向您展示我想要完成的任务。这是一个截图。
我已将上下文菜单条分配给两个控件。我可以返回引发MenuStrip的控件但是如果我添加另一个菜单项就像在这个例子中一样(测试)我得到“Cant Cast”错误。这是我试图使用的代码。
private void testToolStripMenuItem_Click(object sender, EventArgs e)
{
var item = (ToolStripMenuItem)sender;
var menu = (ContextMenuStrip)item.Owner;
MessageBox.Show(menu.SourceControl.Name);
}
答案 0 :(得分:0)
在顶部可能已经回答的问题链接后,我终于能够弄明白了。无论如何,我相信这样做更清洁,更简单。我要做的是为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;
}
}