Shi*_*esh 5 .net c# events delegates
由于我没有太多的信誉来发布图像,我正在阐述一个大问题.
我有三种窗体形式,每次创建窗体时,事件的执行都会增加.
1. Form1(MainForm)
在这里,我调用包含用户控件的第二种形式(SubForm).
2. Form2(SubForm)
在这里,我通过单击用户控件来调用第二个表单(ChildForm).
3. Form3(ChildForm)
它包含一个OK按钮.
这是我的问题.
这是第一种形式的代码(MainForm)
private void button1_Click(object sender, EventArgs e)
{
SubForm obj = new SubForm ();
obj.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
这是包含用户控件的第二种形式(SubForm)的代码
// Event generation
UserControl1.MouseUp += new EventHandler(this.Node_Click);
// Event that calls the ChildForm
private void Node_Click(object sender, EventArgs e)
{
ChildForm obj = new ChildForm();
obj.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
这是第一种形式的代码(MainForm)
private void btnOK_Click(object sender, EventArgs e)
{
this.Close();
}
Run Code Online (Sandbox Code Playgroud)
谁知道为什么会这样?
既然您打电话来UserControl1.MouseUp,我认为您已将该事件声明为static。因此,即使您关闭第二个表单(保持第一个表单未关闭),该事件也不会被清除。为此,您需要参加Unsubscribe活动。
使用Form_Closing事件的第二种形式来Unsubscribe事件。
private void SubForm_FormClosing(object sender, FormClosingEventArgs e)
{
UserControl1.MouseUp -= new EventHandler(this.Node_Click);
}
Run Code Online (Sandbox Code Playgroud)