2011-02-10 66 views
1

在C#winforms应用程序中,我将相同的上下文菜单分配给四个PictureBox控件。如何确定哪个控件激活了上下文菜单?

我想确定哪些用于激活上下文菜单。

我做在一个给定的菜单项的Click事件,这似乎尴尬如下:与对照名工作

MenuItem_Click(object sender, EventArgs e) 
{ 
    PictureBox Origin = (PictureBox)sender; 
    switch (Origin.Name) 
    { 
     case "pbOne": 
      // do something with #1 
      break; 
     case "pbTwo": 
      // do something with #2 
      break; 
    } 
} 

的是,感觉别扭的部分。

你能提出一个更好的方法吗?

编辑:

铸造sender到一个图片不能正常工作,因为我忘了菜单项将是发送者,而不是图片框。所以我将不得不进一步回溯。

回答

3

只需使用SourceControl属性:

var pictureBox = contextMenuStrip1.SourceControl as PictureBox; 
+0

当您发布此回复时,我只是了解了此属性。这似乎是我的谜题缺失的元素。 – JYelton 2011-02-10 18:20:36

1

不太确定你是如何完成这项工作的。 发件人是菜单项,而不是图片框。如果这真的有效,那么你已经有了你想要修补的图片框的参考。它的起源。不需要switch语句。

的作品的另一种方法是使用开放事件:

private PictureBox currentBox; 

    private void allContextMenuStrips_Opening(object sender, CancelEventArgs e) { 
     currentBox = (sender as ContextMenuStrip).SourceControl as PictureBox; 
    } 

,现在您可以在任意菜单项Click事件处理程序的使用currentBox。它的作用是因为只能同时打开一个菜单。

+0

这也适用,再次证明我是缺少了`SourceControl`财产。 – JYelton 2011-02-10 18:22:29

相关问题