关于自定义winform 按钮事件,重复问题
今天第一次写这种代码
if(...)
{
this.btnreg.Click += new System.EventHandler(this.btnreg_Click_1)
}
else if(...)
{
this.btnreg.Click += new System.EventHandler(this.btnreg_Click_2)
}
...
private void btnreg_Click_1(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.Show();
}
private void btnreg_Click_2(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
多运行几次后,Form1和Form2都弹出来了,两个方法都运行了,请问怎么处理呢,就是每次点击按钮都对应一个click方法,不要两个Click_1和Click_2 方法都运行啊,谢谢!
------解决方案--------------------你需要移除相关事件。 因为为一个按钮添加了多个事件
我认为更好的方式是 用标记变量
只订阅一个事件,在事件内 根据标记变量来决定做什么事
------解决方案--------------------用 -= 取消订阅
------解决方案--------------------因为你多次给this.btnreg.Click绑定了事件,所以所有绑定的事件都要执行,你应该控制一下,可以通过
-=去掉一个
------解决方案--------------------
C# code
if(...)
{
this.btnreg.Click -= new System.EventHandler(this.btnreg_Click_2)
this.btnreg.Click += new System.EventHandler(this.btnreg_Click_1)
}
else if(...)
{
this.btnreg.Click -= new System.EventHandler(this.btnreg_Click_1)
this.btnreg.Click += new System.EventHandler(this.btnreg_Click_2)
}
------解决方案--------------------
------解决方案--------------------
if(true)
{btnreg_Click_2(null,null);}
else{btnreg_Click_1(null,null);}
------解决方案--------------------
你要确保你这个注册事件仅运行一次,否则每次注册之前要清空之前所有可能注册的事件。
if(...)
{
this.btnreg.Click -= new System.EventHandler(this.btnreg_Click_1);
this.btnreg.Click -= new System.EventHandler(this.btnreg_Click_2);
this.btnreg.Click += new System.EventHandler(this.btnreg_Click_1);
}
else if(...)
{
this.btnreg.Click -= new System.EventHandler(this.btnreg_Click_1);
this.btnreg.Click -= new System.EventHandler(this.btnreg_Click_2);
this.btnreg.Click += new System.EventHandler(this.btnreg_Click_2);
}