事情是这样发生的。首先我新建一项目,然后在窗体中拉入一个button,再新添一个窗体点击button,在此button事件中显示form2
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Show();
}
我新建一个类class1,然后在这个类中添加事件以及一个方法
class Class1
{
public delegate void EventHanderTest();
public static event EventHanderTest eht;
public static void test()
{
if (eht != null)
eht(); }
}
在新建的form2中我拉入button并在这个button事件中添加调用方法,在from2这个窗体load时我注册class1中的事件
static i=0;
private void button1_Click(object sender, EventArgs e)
{
Class1.test();
} private void Form2_Load(object sender, EventArgs e)
{
Class1.eht += new Class1.EventHanderTest(Class1_eht); }
void Class1_eht()
{
i++;
MessageBox.Show("第"+i+"次");
}
各位请注意问题来了.当我运行时,打开form2的时候第一次点button调用是正常的,但当我把form2关闭然后再点击form1中的按钮打开form2,然后点窗体form2中的button调用class1中的方法让它发送事件,此事我点一次它却发了两次事件,原因可能是当第一次关闭form2时这个事件没有释放掉。我的问题是form2关闭时为什么它注册的事件没有和它一起消失呢`如何解决这样的问题
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Show();
}
我新建一个类class1,然后在这个类中添加事件以及一个方法
class Class1
{
public delegate void EventHanderTest();
public static event EventHanderTest eht;
public static void test()
{
if (eht != null)
eht(); }
}
在新建的form2中我拉入button并在这个button事件中添加调用方法,在from2这个窗体load时我注册class1中的事件
static i=0;
private void button1_Click(object sender, EventArgs e)
{
Class1.test();
} private void Form2_Load(object sender, EventArgs e)
{
Class1.eht += new Class1.EventHanderTest(Class1_eht); }
void Class1_eht()
{
i++;
MessageBox.Show("第"+i+"次");
}
各位请注意问题来了.当我运行时,打开form2的时候第一次点button调用是正常的,但当我把form2关闭然后再点击form1中的按钮打开form2,然后点窗体form2中的button调用class1中的方法让它发送事件,此事我点一次它却发了两次事件,原因可能是当第一次关闭form2时这个事件没有释放掉。我的问题是form2关闭时为什么它注册的事件没有和它一起消失呢`如何解决这样的问题
private void Form2_Load(object sender, EventArgs e)
{
event EventHanderTest eht;
eht += new Class1.EventHanderTest(Class1_eht); }
2.保持静态,但在Form_Load中附加的事件处理方法,在Form_Closing或Form_Closed中移除:
Class1.eht -= new Class1.EventHanderTest(Class1_eht);
对于将事件声明为静态,我始终觉得有点怪异的感觉。