如何确定哪个控件激活了上下文菜单?

时间:2011-02-10 18:05:36

标签: c# winforms contextmenu

在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投射到PictureBox不起作用,因为我忘记了菜单项是发件人,而不是PictureBox。所以我将不得不进一步回溯。

2 个答案:

答案 0 :(得分:3)

只需使用SourceControl属性:

var pictureBox = contextMenuStrip1.SourceControl as PictureBox;

答案 1 :(得分:1)

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

另一种方法是使用Opening事件:

    private PictureBox currentBox;

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

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