在关闭窗体之前,我想显示一个MessageBox以确认退出。因此,创建了一个FormClosing事件。
private void Form_Main_FormClosing(object sender, FormClosingEventArgs e)
{
//nothing here for now
}我让MessageBox显示了两次。调试工具显示,不知何故,代码遍历了FormClosing()两次。即使在上面的FormClosing()中没有任何东西,这种情况也会发生。我确实在我的整个代码中搜索了FormClosing(),并且只有一个地方订阅了它。我在另外两个项目中使用了相同的FormClosing(),但没有发生这种情况。有人能给我指点一下吗?这对我来说没有任何意义。
发布于 2012-05-29 02:04:14
不能在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;
}
}发布于 2012-05-26 07:04:59
最有可能的“猜测”是您订阅了该事件两次。如果使用设计器,请记住检查自动生成的设计器代码。
如果你在事件上设置了调试--你也可以拉起调用栈(http://msdn.microsoft.com/en-us/library/a3694ts5.aspx - BreakPoint / Window / Call Stack),你可以看到执行了哪些代码才能到达现在的位置。
直接调用事件处理程序是完全可能的(但您很可能不会错误地这么做);但是查看调用堆栈可以帮助您找到它。
最后-确保在处理关闭事件时不调用Application.Exit或类似的函数-我相信这会触发第二次触发。
发布于 2012-05-29 23:51:19
好了,我想通了。我有:
InitializeComponent();
在两个地方。在删除其中一个之后,事情就会按它们应该的方式工作。
https://stackoverflow.com/questions/10761916
复制相似问题