首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FormClosing()事件加载了两次

FormClosing()事件加载了两次
EN

Stack Overflow用户
提问于 2012-05-26 06:10:59
回答 3查看 6.2K关注 0票数 4

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

代码语言:javascript
复制
  private void Form_Main_FormClosing(object sender, FormClosingEventArgs e)
  {
     //nothing here for now
  }

我让MessageBox显示了两次。调试工具显示,不知何故,代码遍历了FormClosing()两次。即使在上面的FormClosing()中没有任何东西,这种情况也会发生。我确实在我的整个代码中搜索了FormClosing(),并且只有一个地方订阅了它。我在另外两个项目中使用了相同的FormClosing(),但没有发生这种情况。有人能给我指点一下吗?这对我来说没有任何意义。

EN

回答 3

Stack Overflow用户

发布于 2012-05-29 02:04:14

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

窗体关闭代码应为:

代码语言:javascript
复制
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;
     }
  }
票数 3
EN

Stack Overflow用户

发布于 2012-05-26 07:04:59

最有可能的“猜测”是您订阅了该事件两次。如果使用设计器,请记住检查自动生成的设计器代码。

如果你在事件上设置了调试--你也可以拉起调用栈(http://msdn.microsoft.com/en-us/library/a3694ts5.aspx - BreakPoint / Window / Call Stack),你可以看到执行了哪些代码才能到达现在的位置。

直接调用事件处理程序是完全可能的(但您很可能不会错误地这么做);但是查看调用堆栈可以帮助您找到它。

最后-确保在处理关闭事件时不调用Application.Exit或类似的函数-我相信这会触发第二次触发。

票数 2
EN

Stack Overflow用户

发布于 2012-05-29 23:51:19

好了,我想通了。我有:

InitializeComponent();

在两个地方。在删除其中一个之后,事情就会按它们应该的方式工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10761916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档