gpt4 book ai didi

winforms - 什么会导致表单无法自行关闭?

转载 作者:行者123 更新时间:2023-12-04 06:59:19 25 4
gpt4 key购买 nike

我想知道是什么导致表单无法关闭。

我有一个很大的表单,有几个 TabControls、DataGridViews 和许多 DataBound-Controls,至少涉及 10 个 BindingSource。 (这就是为什么我不能在这里发布我的代码,抱歉)。

现在,我遇到了问题,即在开发中的某个地方(只是重构)表单停止正确关闭。当我单击关闭按钮(红十字框)时,我会通过 FormClosing 和 FormClosed 但没有任何 react 。 VisualStudio2008 调试并在抛出所有错误时暂停并没有提到出现问题,表单只是停留在原处。

什么可能导致这种行为?不是设置了 FormClosing-Event 中的 e.Cancel !

一步一步将我的更改合并到另一个干净的工作副本后,表单正确关闭,但抛出异常:

带有消息的 ArgumentNullException:“值不能为空。参数名称:组件”。在调用 base.Dispose(disposing) 行时,它会在 Form.Designer.Dispose 中抛出。

似乎与DataBinging有关,欢迎任何提示。

我将放入 StackTrace,它实际上是任何 DataBound 控件,据我从 StackTrace 中了解,它是一个 TextBox - 我没有启用 Framework Source Stepping,所以我无法弄清楚 TextBox 在这里中断了什么.

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)

好吧,明白了,随着框架源步进工作(为什么它如此复杂),我可以找出数据绑定(bind)失败的原因。它是对在运行时为空的对象的属性的数据绑定(bind)。谢谢您的帮助。

PS:我很抱歉那些对我生气的人,但我明确提出了这个问题,因为我没有得到那些整天的答案。很高兴提醒我这些可能的失败,但如果我确实声明与此无关,请不要幼稚地假装这个。

最佳答案

我认为您的 10 个绑定(bind)源中的一个有错误(在您的许多数据绑定(bind)控件之一中)并且没有将您从某个字段中释放出来。如果数据绑定(bind)中存在错误并且问题确实被默默吞下,VS 就不是很透明。

虽然,如果是这样的话:

When I click on the Close-Button (Red-Cross-Box) I goes through FormClosing and FormClosed



那么这与我的理论有些矛盾。

为什么不尝试逐个解耦数据绑定(bind),然后看看是否可以关闭表单?

关于winforms - 什么会导致表单无法自行关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2131445/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com