我有一个大表单,有几个TabControls、datagridview和许多DataBound控件,至少涉及10个BindingSources(这就是我不能在这里发布代码的原因,对不起)。
现在,我遇到了一个问题,在开发过程中的某个地方(只是重构),表单停止了正确关闭。当我点击“关闭”按钮(红十字框)时,我经历了FormClosing和FormClosed,但之后什么也没有发生。VisualStudio2008具有调试功能,并在抛出所有错误时暂停。如果事件未提及发生了错误,窗体将保持原样。
逐步将我的更改合并到另一个干净的工作副本后,表单将正确关闭,但会引发异常:
ArgumentNullException,消息为:“该值不能为null。参数名称:组件”。调用base.Dispose(disposing)行时,它将抛出Form.Designer.Dispose。
我会放在StackTrace中,它实际上是任何一个数据绑定控件,从StackTrace中我了解到,它是一个文本框-我没有启用框架源代码单步执行,所以我无法确定文本框在这里出现了什么问题。
bei System.ComponentModel.ReflectPropertyDescriptor.RemoveValueChanged(Object component, EventHandler handler)
bei System.Windows.Forms.BindToObject.CheckBinding()
bei System.Windows.Forms.Binding.CheckBinding()
bei System.Windows.Forms.Binding.SetBindableComponent(IBindableComponent value)
bei System.Windows.Forms.ControlBindingsCollection.ClearCore()
bei System.Windows.Forms.BindingsCollection.Clear()
bei System.Windows.Forms.ControlBindingsCollection.Clear()
bei System.Windows.Forms.Control.ResetBindings()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.Windows.Forms.TextBox.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.Windows.Forms.ContainerControl.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.Windows.Forms.TabControl.Dispose(Boolean disposing)
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Control.Dispose(Boolean disposing)
bei System.Windows.Forms.ContainerControl.Dispose(Boolean disposing)
bei System.Windows.Forms.Form.Dispose(Boolean disposing)
bei My.BaseForm.Dispose(Boolean disposing) in BaseForm.Designer.cs:Zeile 30.
bei My.InheritedForm.Dispose(Boolean disposing) in InheritedForm.Designer.cs:Zeile 25.
bei System.ComponentModel.Component.Dispose()
bei System.Windows.Forms.Form.WmClose(Message& m)
bei System.Windows.Forms.Form.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
好的,明白了,随着框架源代码步进工作(为什么它如此复杂),我可以找出数据绑定失败的原因。它是对运行时为null的对象属性的数据绑定。谢谢你的帮助。
PS:我为那些对我生气的人感到抱歉,但我明确地提出了这个问题,因为我没有得到那些整天的答案。提醒我这些可能的失败是很好的,但如果我真的说不是这样的话,不要孩子气地假装这样。