是框架设置e.取消为true

本文关键字:true 取消 框架 设置 | 更新日期: 2023-09-27 17:54:57

我正在编写一个Windows窗体应用程序(2.0框架(,遇到了一个奇怪的错误。

在我的表单中,当抛出特定异常时,我有一个catch块,它应该记录错误,用对话框通知用户,然后通过调用此函数关闭表单。Close((。前两步很好,但这一步。Close((没有任何作用。我的第一个想法是,我必须有一个将e.Cancel设置为true的事件处理程序,但在彻底检查代码后,我找不到一个。此外,我还没有覆盖表单的OnCancel方法。

在试图追踪错误的过程中,我为表单的OnCancel方法编写了一个重写,并在其中设置了一个断点。在OnCancel的开头,e.Cancel已经设置为true。如果我的理解是正确的,那么重写应该在任何事件处理程序之前运行,这样似乎就排除了这个问题是由我不知怎么错过的事件处理程序引起的可能性。

在我的OnClosing重写方法中,如果我将e.Cancel设置为false,表单会很好地关闭,并且我的程序会按我的预期工作,但我不想那样修复它。很明显,有些代码正在产生意想不到的副作用,我想了解发生了什么,而不是求助于"数字胶带">

框架本身似乎取消了我的表单关闭。在任何情况下,框架都能做到这一点吗?

谢谢。

编辑。。。

我创建了一个小的测试项目,并能够在一个简单得多的表单上重新创建错误

如果你想重现这种情况,这样你就能明白我的意思,试试这个。。。创建一个表单并添加一个文本框(我想其他控件也可以(。让您的表单处理文本框的Validated事件,并在处理程序中调用它。关现在重写Form.OnClossing((并在其中设置断点。

现在运行程序,键入一些文本,并在文本框中添加制表符,这样它就可以验证(我想你会想添加一个按钮或其他东西,这样你就可以使用制表符进行其他控制。(

在OnClosing开始时,e.Cancel将自动设置为true。这就是我试图弄清楚的。为什么会发生这种情况?

是框架设置e.取消为true

我在Framework 2.0中有完全相同的场景。如果发生了一组特定的事件,那么无论应用程序中发生了什么,以下代码每次都会在该子命令的第3行的断点处停止。

这似乎发生在我们禁用表单上的所有控件,然后启用所有相同的控件,然后关闭该表单之后(当另一个进程更改一些相关数据时,我们正在锁定该表单(。

如果这是系统中应用程序表单关闭事件的最低方法,那么除了框架之外,还可以将e.Cancel设置为true吗?

Protected Overrides Sub OnFormClosing(e As System.Windows.Forms.FormClosingEventArgs)
  If e.Cancel Then
    e.Cancel = False
  End If
  MyBase.OnFormClosing(e)
End Sub

我不确定您是否要求我们猜测您的代码是否正确或准确。我可以告诉你,我从来没有见过这个问题。

然而,很容易确定某个事件处理程序是否正在取消:只需使用调试器即可!仔细阅读代码,看看会发生什么。

考虑到你在这里提供的少量细节,我认为你的重点应该放在弄清楚发生了什么上。

你的问题很不清楚。您引用了一个方法OnCancel,但是Form类中不存在这样的方法。根据问题中的第一句话,您正在使用.NET 2.0,但是您正在覆盖Form.OnClosing。请注意,从该框架的2.0版本起,该方法已被弃用。您应该使用Form.OnFormClosing,从2.0开始是新的。请尝试覆盖相反,看看你是否观察到了同样的问题。我当然从来没有在OnFormClosing上看到过这样的事情。