C# 检测右键单击表单上的每个PictureBox

C# 检测右键单击表单上的每个PictureBox,c#,C#,我想在表单中的任何PictureBox上检测右键单击。我已经为一个PictureBox设置了右键单击功能。这很好,但我希望有一个事件将触发所有右键单击表单上的PictureBoxs 此右键单击甚至需要知道PictureBox名称,因为某些PictureBox的上下文菜单将不同 下面是我为一个PictureBox的右键单击事件提供的代码 private void DesktopIcon1Icon_MouseClick(object sender, MouseEventArgs e) { s

我想在表单中的任何
PictureBox
上检测右键单击。我已经为一个
PictureBox
设置了右键单击功能。这很好,但我希望有一个事件将触发所有右键单击表单上的
PictureBoxs

此右键单击甚至需要知道
PictureBox
名称,因为某些
PictureBox
的上下文菜单将不同

下面是我为一个
PictureBox
的右键单击事件提供的代码

private void DesktopIcon1Icon_MouseClick(object sender, MouseEventArgs e)
{
    switch (e.Button)
    {
        case MouseButtons.Right:
        {
            DesktopIconRightclick.Show(this, new Point(e.X, e.Y));
        }
        break;
    }
}
如果右键单击任何
PictureBox
,我需要调整此代码以触发

更新示例

if (pic = DesktopIcon2)
{
    openToolStripMenuItem.visible = false;
}

您可以尝试使用反射查找所有PictureBox实例。 检查作为起点

检查此SO以了解实施示例:

您可以使用一个事件触发所有右键单击
图片框
,如下所示:

public Form1()
{
    InitializeComponent();
    pictureBox1.MouseClick += pictureBox_MouseClick;
    pictureBox2.MouseClick += pictureBox_MouseClick;
}
private void pictureBox_MouseClick(object sender, MouseEventArgs e)
{
    var pic = (sender as PictureBox).Name;//pic is the Name of the PictureBox that is clicked
    switch (e.Button)
    {
        case MouseButtons.Right:
        {
            MessageBox.Show(pic);//Just for example
            DesktopIconRightclick.Show(this, new Point(e.X, e.Y));
        }
        break;
    }
}
然后您可以使用
Sender
查找
PictureBox
名称
,如下所示:

public Form1()
{
    InitializeComponent();
    pictureBox1.MouseClick += pictureBox_MouseClick;
    pictureBox2.MouseClick += pictureBox_MouseClick;
}
private void pictureBox_MouseClick(object sender, MouseEventArgs e)
{
    var pic = (sender as PictureBox).Name;//pic is the Name of the PictureBox that is clicked
    switch (e.Button)
    {
        case MouseButtons.Right:
        {
            MessageBox.Show(pic);//Just for example
            DesktopIconRightclick.Show(this, new Point(e.X, e.Y));
        }
        break;
    }
}

这个看起来不错,不太确定是否适合我的需要。但是谢谢。我认为不需要反射,您可以使用表单的Controls属性,并且
在每个控件上都是PictureBox
操作符。您可能需要在具有控件的子控件上递归。谢谢您,我现在可以使用它了。谢谢你的帮助。