2014-02-21 41 views
1

我一直在閱讀很多小時,現在試圖找出如何在Visual Studio 2012中使用C#正確投射上下文菜單條。我建立了一個小測試應用程序,向您展示我正在努力完成的任務。這是一個屏幕截圖。如何正確投射ContextMenuStrip C#

enter image description here

我已分配的上下文菜單條兩者的控制。我可以返回引發MenuStrip的控件,但是如果我添加另一個菜單項就像在這個例子中(Test),我得到了「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

使用調試器查看對象的真實類型。 – SLaks

+0

在第一行設置一個斷點,並確認'sender'是什麼.. –

+0

我相信一定是因爲「Test」的所有者不是ContextMenuStrip而是另一個MenuItem。 – SuperOli

回答

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