这是一个winform C#问题。
我有一个数据对象,比如说,Person。它有一个名为Age的属性,如果Age设置为负值,则会从其属性设置器中抛出异常。
在表单上,Age属性使用以下命令绑定到文本框:
var binding = tbAge.DataBindings.Add("Text", person, "Age", true, DataSourceUpdateMode.OnValidation);
为了发现错误,我创建了一个BindingComplete事件侦听器,并针对BindingCompleteState.Success测试BindingCompleteState,并向用户显示必要的错误消息。
这就是全部背景。现在,如果我在文本框上设置负值并直接单击表单右上角的X按钮将其关闭,则显示预期的错误消息,但表单未关闭。
我希望关闭表单,如果在这种情况下显示错误消息,则不关心。验证部分最好不要改变。我不想隐藏X按钮并手动在表单上放置关闭按钮。有没有正确的方法来实现我的目的?非常感谢您的帮助。
答案 0 :(得分:1)
我刚刚找到了解决方案。
虽然我仍然不知道阻止表单关闭的原因,但我想这与我从数据对象抛出的异常和表单的一些验证有关。 (如果我错了,请纠正我。)
禁用表单的AutoValidate不是解决方案。从那时起,我的错误信息将不会显示。
我所做的是为Person类实现IDataErrorInfo。通常,教科书告诉IDataErrorInfo使用一些ErrorProvider UI组件来显示控件旁边的红色圆圈。我们根本不使用ErrorProvider。但IDataErrorInfo仍然有用,因为BindingCompleteState仍将设置为正确状态。所以IDataErrorInfo充当我的数据对象和绑定源之间的桥梁,将底层数据级错误传递给表面。然后bindingcomplete事件做同样的事情。
使用IDataErrorInfo的关键是现在我可以毫无问题地关闭我的表单。我仍然不知道为什么但是没有从数据对象抛出异常,表单可以正确关闭自己。让我知道阻止表单关闭我的问题的原因是什么。