c# - 选择菜单项时多次调用 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 相同。
你能帮我解决这个问题吗?
解决方案
什么时候会被多次调用?我想当切换到另一个菜单项时,一切都应该正常。但是当切换回之前已经点击过的项目时,除了现有的点击处理程序之外,将注册另一个点击处理程序,并将调用 Pbox_Click 方法两次。
您可以尝试将事件注册放在构造方法中或在重新注册之前释放其他点击事件。
推荐阅读
- sql-server - If 语句不允许插入语句工作,因为单元格为空
- android - 反应本机 - 网络请求仅在 Nougat 上失败
- opengl-es - 哪些函数与 OpenGL / WebGL 中的哪些目标一起使用?
- node.js - 使用 nvm 时 Yarn 版本错误
- c - 我的程序不会停止执行 if 语句但条件不满足
- python - 在python中同时运行一个函数和一个线程
- javascript - NextJS 路由器编码查询字符
- django - Django ORM 按日期分组并获取总值
- node.js - Nuxt:如何从 express 中获取会话值
- python - 无法使用 Selenium 填写表单:AttributeError:“WebDriver”对象没有属性“get_element_by_xpath”