繁体   English   中英

如何限制一次多次触发事件

[英]How do I restrict events firing more than once at a time

由于我没有太多的信誉来发布图像,我正在阐述一个大问题。

我有三种窗体形式,每次创建窗体时,事件的执行都会增加。

1. Form1 (MainForm)

在这里,我调用包含用户控件的第二种形式(SubForm)。

2. Form2 (SubForm)

在这里,我通过单击用户控件来调用第二个表单(ChildForm)。

3. Form3 (ChildForm)

它包含一个OK按钮。

这是我的问题。

  • 首先,我打开MainForm,然后单击按钮打开第二个表单(SubForm)。
  • 现在以第二种形式(SubForm)我单击显示第三种形式(ChildForm)的用户控件。
  • 当我在第三个表单中单击“确定”按钮时,表单将关闭。
  • 现在我关闭第二个表单(SubForm)而不关闭第一个表单(主表单)并单击第一个表单(MainForm)中的按钮再次打开第二个表单(SubForm)。
  • 现在我在第二种形式(SubForm)中单击用户控件,并打开第三种形式(ChildForm)。
  • 现在,当我在第三个表单(ChildForm)中单击“确定”时,第二个表单(SubForm)中的事件再次被触发,第三个表单(ChildForm)被打开四次。
  • 现在,当我再次关闭第二个表单(SubForm)并单击用户控件并获取第三个表单(ChildForm)时,第三个表单(ChildForm)将打开三次等等。

这是第一种形式的代码(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();
} 

谁知道为什么会这样?

嘿,我不确定发生了什么,但如果你想只应用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; 如果我找对你,我想这就是你需要做的:)

由于您正在调用UserControl1.MouseUp ,我认为您已将事件声明为static 因此,即使您关闭第二个表单(保持第一个表单未闭合),该事件也不会被清除。 为此,您需要Unsubscribe该活动。

使用第二种形式的Form_Closing事件Unsubscribe事件。

private void SubForm_FormClosing(object sender, FormClosingEventArgs e)
{
    UserControl1.MouseUp -= new EventHandler(this.Node_Click);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM