由于我在发布图片方面没有多少声誉,我正在详细阐述这个问题。
我有三种窗体形式,每次创建窗体时,事件的执行都会增加。
1。 Form1中(适用的MainForm)
这里我调用包含用户控件的第二种形式(SubForm)。
2。窗体2 (子窗体)
在这里,我通过单击用户控件来调用第二个表单(ChildForm)。
第3。 Form3 (ChildForm)
它包含一个OK按钮。
这是我的问题。
以下是第一种形式的代码(MainForm)
private void button1_Click(object sender, EventArgs e)
{
SubForm obj = new SubForm ();
obj.ShowDialog();
}
以下是第二种形式的代码(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();
}
以下是第一种形式的代码(MainForm)
private void btnOK_Click(object sender, EventArgs e)
{
this.Close();
}
有谁知道为什么会这样?
答案 0 :(得分:2)
嘿,我不确定发生了什么,但如果你想只应用node_click一次只是声明一个bool var canEnter = true; 并且这样做
private void Node_Click(object sender, EventArgs e) {
if(canEnter) {
ChildForm obj = new ChildForm();
obj.ShowDialog();
canEnter=false;
}
}
并为子表单(已关闭的事件)创建事件并放入其中 canEnter = TRUE; 如果我找对你,我想这就是你需要做的事情:)
答案 1 :(得分:1)
由于您正在调用UserControl1.MouseUp
,我认为您已将该事件声明为static
。因此,即使您关闭第二个表单(保持第一个表单未闭合),该事件也不会被清除。为此,您需要Unsubscribe
事件。
将第二种形式的Form_Closing
事件用于Unsubscribe
事件。
private void SubForm_FormClosing(object sender, FormClosingEventArgs e)
{
UserControl1.MouseUp -= new EventHandler(this.Node_Click);
}