【问题标题】:Errors found by Bindingsource prevent form from closingBindingsource 发现的错误阻止表单关闭
【发布时间】:2010-07-29 11:49:12
【问题描述】:

这是一个 winform C# 问题。

我有一个数据对象,比如 Person。它有一个名为 Age 的属性,如果 Age 设置为负值,则会从其属性设置器中抛出异常。

在表单上,​​Age 属性使用以下方式绑定到文本框:

var binding = tbAge.DataBindings.Add("Text", person, "Age", true, DataSourceUpdateMode.OnValidation);

为了发现错误,我创建了一个 BindingComplete 事件侦听器并针对 BindingCompleteState.Success 测试 BindingCompleteState 并向用户显示必要的错误消息。

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

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

【问题讨论】:

    标签: c# winforms data-binding


    【解决方案1】:

    我刚刚找到了解决办法。

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

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

    我所做的是为 Person 类实现 IDataErrorInfo。通常教科书告诉 IDataErrorInfo 与一些 ErrorProvider UI 组件一起使用以在控件旁边显示红色圆圈。我们根本不使用 ErrorProvider。但 IDataErrorInfo 仍然有用,因为 BindingCompleteState 仍将设置为正确的状态。所以 IDataErrorInfo 充当我的数据对象和绑定源之间的桥梁,将底层数据级错误传递给表面。然后 bindingcomplete 事件做同样的事情。

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

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 2021-09-11
      • 1970-01-01
      相关资源
      最近更新 更多