读书人

关于自定义winform 按钮事件重复有关

发布时间: 2012-05-29 12:16:00 作者: rapoo

关于自定义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)}
[解决办法]
探讨

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……

[解决办法]
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);
}

读书人网 >C#

热点推荐