c# - 如何限制事件一次触发多次

标签 c# .net events delegates

由于我没有太多的声誉来发布图片,所以我将作为一个大问题进行阐述。

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

<强>1。 Form1(主窗体)

这里我调用包含用户控件的第二个窗体(子窗体)。

<强>2。 Form2(子窗体)

这里我通过点击用户控件来调用第二种形式(ChildForm)。

<强>3。 Form3(子窗体)

它包含一个确定按钮。

这是我的问题。

  • 首先我打开 MainForm 并单击按钮打开第二个窗体(子窗体)。
  • 现在在第二种形式 (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;
 } 
             }

并为子窗体创建事件(关闭事件)并放入其中 可以输入=真; 如果我没猜错,我想这就是你需要做的:)

关于c# - 如何限制事件一次触发多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27484469/

相关文章:

c# - 在 C# 中查找有关通过 USB 连接的所有串行设备的信息

c++ - SDL iOS 禁用事件泵

c# - LINQ group by 多个计数

c# - 当 IDENTITY_INSERT 设置为 OFF 时,EF Core 给出错误无法在表 'Tags' 中插入标识列的显式值

.net - 在 VB.Net 中进行未经检查的整数加法的最快方法?

c# - 存储库中 Database.SetInitializer<ArContext>(null) 的用途?

c# - 我是在正确地播种数据还是做错了什么?

c# - 播放任何声音文件(或至少播放普通音频文件)

c# - 如何让最远的 child 接收共享事件?

c# - 前缀 "On"在 C# 编码中的事件案例中实现了什么?