在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。所以我将不得不进一步回溯。
答案 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 。它的工作原理是因为只能同时打开一个菜单。