如何正确转换ContextMenuStrip C#

时间:2014-02-21 19:46:42

标签: c# casting contextmenustrip

我已经阅读了好几个小时,试图弄清楚如何使用C#在Visual Studio 2012中正确地构建Context Menu Strip。我构建了一个小测试应用程序来向您展示我想要完成的任务。这是一个截图。

enter image description here

我已将上下文菜单条分配给两个控件。我可以返回引发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);
}

1 个答案:

答案 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;
    }
}