C# Bindingsource发现的错误阻止窗体关闭

C# Bindingsource发现的错误阻止窗体关闭,c#,winforms,data-binding,C#,Winforms,Data Binding,这是一个winform C#问题 我有一个数据对象,比如说Person。它有一个名为Age的属性,如果Age设置为负值,则将从其属性setter引发异常 在表单上,使用以下命令将Age属性绑定到文本框: var binding = tbAge.DataBindings.Add("Text", person, "Age", true, DataSourceUpdateMode.OnValidation); 为了发现错误,我创建了一个BindingComplete事件侦听器,并根据BindingC

这是一个winform C#问题

我有一个数据对象,比如说Person。它有一个名为Age的属性,如果Age设置为负值,则将从其属性setter引发异常

在表单上,使用以下命令将Age属性绑定到文本框:

var binding = tbAge.DataBindings.Add("Text", person, "Age", true, DataSourceUpdateMode.OnValidation);
为了发现错误,我创建了一个BindingComplete事件侦听器,并根据BindingCompleteTestate.Success测试BindingCompleteTestate,并向用户显示必要的错误消息

这就是所有的背景。现在,如果我在文本框上设置了一个负值,并直接单击表单右上方的X按钮将其关闭,则会显示预期的错误消息,但表单未关闭


我希望表单被关闭,并且不关心在这种情况下是否显示错误消息。最好不要更改验证部分。我不想隐藏X按钮并手动在表单上放置关闭按钮。有什么正确的方法可以达到我的目的吗?非常感谢您的帮助。

我刚刚找到了一个解决方案

虽然我仍然不知道表单被阻止关闭的原因,但我想这与我从数据对象抛出的异常和表单的一些验证有关。(如果我错了,请纠正我。)

禁用表单的自动验证不是解决方案。从那时起,我的错误消息将不会显示

我要做的是为Person类实现IDataErrorInfo。通常,教科书告诉IDataErrorInfo与一些ErrorProviderUI组件一起工作,以显示控件旁边的红色圆圈。我们根本不使用ErrorProvider。但是IDataErrorInfo仍然有用,因为BindingCompleteTestate仍将设置为正确的状态。所以IDataErrorInfo充当我的数据对象和bindingsource之间的桥梁,将底层数据级错误传递给surface。然后bindingcomplete事件执行相同的操作

使用IDataErrorInfo的关键是现在我可以毫无问题地关闭表单。我仍然不知道为什么,但是如果没有从数据对象抛出异常,表单可以正确地关闭自己。让我知道是什么原因阻止表单在我的问题中关闭