在C#WinForms中,我如何判断是谁在OnClosing中将Cancel设置为true?

在C#WinForms中,我如何判断是谁在OnClosing中将Cancel设置为true?,c#,winforms,C#,Winforms,我有一个表单,其中OnClosing中有一些代码,用于确定是否允许该表单关闭,因为在某些情况下,我会取消关闭 问题是,我的应用程序中的某个地方导致CancelEventArgs.Cancel被设置为true,这样在我的OnClosing函数中Cancel就是true。就我个人而言,我不知道这是在哪里发生的 如果我查看OnClosing中的调用堆栈,除了一些外部代码和我的Application.Run之外,什么都没有 所以问题是,我怎么才能知道谁在设置Cancel=true?你是说当你输入OnCl

我有一个表单,其中OnClosing中有一些代码,用于确定是否允许该表单关闭,因为在某些情况下,我会取消关闭

问题是,我的应用程序中的某个地方导致CancelEventArgs.Cancel被设置为true,这样在我的OnClosing函数中Cancel就是true。就我个人而言,我不知道这是在哪里发生的

如果我查看OnClosing中的调用堆栈,除了一些外部代码和我的Application.Run之外,什么都没有


所以问题是,我怎么才能知道谁在设置Cancel=true?

你是说当你输入OnClosing时,e.Cancel是真的吗

一个可能的原因是,如果forms
Validate
方法失败,您是否有任何验证控件

在反射器中看一看,您可以看到

private void WmClose(ref Message m)
{
  blah....
  e.Cancel = !base.Validate(true);
  blah....      

您可以在调试模式下运行应用程序,并在每个Cancel=true语句中设置断点


应用程序将在调用的语句中停止,您可以看到它在哪里。

您可以发布一些代码吗..是的。一种解决方法是在调用基本方法之前重写OnFormClosing并强制e.Cancel=false。我可以将Cancel设置为false,但这并不能解决问题。让我检查一下验证……但是是的,你是正确的,例如,输入onclose时取消是正确的。