FormClosing()事件加载两次

时间:2012-05-25 22:10:59

标签: c# formclosing

我想在关闭表单之前显示一个MessageBox来确认退出。因此,创建了一个FormClosing事件。

  private void Form_Main_FormClosing(object sender, FormClosingEventArgs e)
  {
     //nothing here for now
  }

我将MessageBox显示两次。调试工具显示代码以某种方式遍历FormClosing()两次。即使我在上面的FormClosing()中没有任何内容,也会发生这种情况。我在我的整个代码中搜索了FormClosing(),并且只有一个地方可以订阅它。我在其他两个项目中有相同的FormClosing(),但这不会发生。任何人都可以给我指针吗?这对我没有任何意义。

3 个答案:

答案 0 :(得分:3)

您不能在FormClosing事件处理程序中调用Close和Dispose方法

表单结束代码应为:

private void Form_Main_FormClosing(object sender, FormClosingEventArgs e)
  {
     DialogResult result = MessageBox.Show("EXIT?", "Exit Program", MessageBoxButtons.YesNo);

     if (result != DialogResult.Yes)
     {
          e.Cancel = true;
     }
  }

答案 1 :(得分:2)

最可能的'猜测'是你订阅了两次事件。如果您使用的是Designer,请记得检查自动生成的设计器代码。

如果您在事件上设置BreakPoint - 您还可以调出调用堆栈(http://msdn.microsoft.com/en-us/library/a3694ts5.aspx - 调试/窗口/调用堆栈)并且您可以看到执行了什么代码来到达你所在的位置。

完全可以直接调用事件处理程序(但可能不太可能是你错误地执行了);但是查看调用堆栈可以帮助追踪它。

最后 - 确保在处理Closing事件时你没有调用Application.Exit或类似事件 - 我相信这会引发第二次触发。

答案 2 :(得分:2)

好的,我明白了。我有:

的InitializeComponent();

在两个地方。删除其中一个后,事情按照他们应该的方式工作。