C# 如何确定哪个控件激活了上下文菜单?
在WinC窗体应用程序中,我为四个PictureBox控件指定了相同的上下文菜单 我想确定哪个用于激活上下文菜单 在给定菜单项的单击事件中,我执行了以下操作,这看起来很尴尬:C# 如何确定哪个控件激活了上下文菜单?,c#,winforms,contextmenu,C#,Winforms,Contextmenu,在WinC窗体应用程序中,我为四个PictureBox控件指定了相同的上下文菜单 我想确定哪个用于激活上下文菜单 在给定菜单项的单击事件中,我执行了以下操作,这看起来很尴尬: MenuItem_Click(object sender, EventArgs e) { PictureBox Origin = (PictureBox)sender; switch (Origin.Name) { case "pbOne": // do so
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;
}
}
使用控件名是令人感到尴尬的部分
你能建议一个更好的方法吗
编辑:
将发件人强制转换为PictureBox不起作用,因为我忘记了菜单项将是发件人,而不是PictureBox。因此,我将不得不进一步回溯。不太确定您是如何做到这一点的。发件人是菜单项,而不是图片框。如果这确实有效,那么您已经有了要修补的图片框的引用。这是它的起源。不需要switch语句 另一种有效的方法是使用开幕式:
private PictureBox currentBox;
private void allContextMenuStrips_Opening(object sender, CancelEventArgs e) {
currentBox = (sender as ContextMenuStrip).SourceControl as PictureBox;
}
现在,您可以在任何菜单项Click事件处理程序中使用currentBox。它之所以有效,是因为同一时间只能打开一个菜单。不太清楚您是如何做到这一点的。发件人是菜单项,而不是图片框。如果这确实有效,那么您已经有了要修补的图片框的引用。这是它的起源。不需要switch语句 另一种有效的方法是使用开幕式:
private PictureBox currentBox;
private void allContextMenuStrips_Opening(object sender, CancelEventArgs e) {
currentBox = (sender as ContextMenuStrip).SourceControl as PictureBox;
}
现在,您可以在任何菜单项Click事件处理程序中使用currentBox。它之所以有效,是因为同时只能打开一个菜单。只需使用属性:
var pictureBox = contextMenuStrip1.SourceControl as PictureBox;
简单使用属性:
var pictureBox = contextMenuStrip1.SourceControl as PictureBox;
当你发布此回复时,我刚刚了解了此物业。这似乎是我的谜题中缺少的元素。当你发布这个回复时,我刚刚发现了这个属性。它似乎是我的谜题中缺少的元素。这同样适用于我缺少的SourceControl属性。这同样适用于我缺少的SourceControl属性。