首页 > 解决方案 > 选择菜单项时多次调用 C# 事件处理程序

问题描述

我想实现一些图片框,当其中一个被点击时,应该会出现一个 MessageBox 并告诉你点击了哪个框。

但是,我想实现一个选择应该出现多少个图片框。当我选择另一个 MenuItem 时,单击事件将被多次调用。我尝试取消订阅,但它不起作用。

这是我的代码:

public partial class Form1 : Form
{
    PictureBox Pbox1;
    PictureBox Pbox2;
    PictureBox Pbox3;
    PictureBox Pbox4;

    public Form1()
    {
        InitializeComponent();
        this.Text = "Picturebox";

        Pbox1 = new PictureBox();
        Pbox2 = new PictureBox();
        Pbox3 = new PictureBox();
        Pbox4 = new PictureBox();
    }

    private void Pbox_Click(object sender, EventArgs e, int nr)
    {
        MessageBox.Show("Picture number " + nr.ToString() + " is clicked");
    }

    private void toolStripMenuItem2_Click(object sender, EventArgs e)
    {
        Pbox1.Image = new Bitmap(@"Picture.png");
        Pbox1.Location = new Point(20, 40);
        Pbox1.Size = new Size(160, 120);
        Pbox1.SizeMode = PictureBoxSizeMode.StretchImage;

        Pbox1.Click += (sender2, e2) => Pbox_Click(sender2, e2, 1);
        this.Controls.Add(Pbox1); }

其余与 toolStripMenuItem2 相同。

你能帮我解决这个问题吗?

标签: c#eventhandler

解决方案


什么时候会被多次调用?我想当切换到另一个菜单项时,一切都应该正常。但是当切换回之前已经点击过的项目时,除了现有的点击处理程序之外,将注册另一个点击处理程序,并将调用 Pbox_Click 方法两次。

您可以尝试将事件注册放在构造方法中或在重新注册之前释放其他点击事件。


推荐阅读