如何在更新版本的.NET(3.5以上)中处理数据绑定期间发生的异常?
下面是MSDN中的示例如何在更新版本的.NET(3.5以上)中处理数据绑定期间发生的异常?,.net,winforms,validation,data-binding,exception-handling,.net,Winforms,Validation,Data Binding,Exception Handling,下面是MSDN中的示例 () 这个例子背后的想法是: 文本框控件使用BindingSource和Binding对象绑定到业务对象属性。业务对象就是模型 业务对象中的属性设置器验证输入,并在输入无效时引发异常 绑定对象被配置为捕获此类异常 绑定触发BindingComplete事件。如果存在异常,则会捕获该异常,并且可以通过BindingCompleteEventArgs获取异常消息。验证错误消息可以通过这种方式流回到表示层 到目前为止,一切都很好 这是奇怪的部分。对于不同版本的.NET,捕获业务
() 这个例子背后的想法是:
BindingSource
和Binding
对象绑定到业务对象属性。业务对象就是模型BindingComplete
事件。如果存在异常,则会捕获该异常,并且可以通过BindingCompleteEventArgs
获取异常消息。验证错误消息可以通过这种方式流回到表示层- 这适用于.NET 3.5版。绑定框架捕获异常<代码>绑定完成事件被触发。事件参数表明绑定未成功。正如所料李>
- .NET版本4.0、4.5、4.5.2在模型的属性设置器中没有捕获异常。执行因该异常而中断
- 较新版本的.NET中发生了什么变化,导致此示例无法按预期工作李>
- 有没有一种方法可以在较新版本的.NET上实现这一点?该示例是否缺少在较新版本的.NET中引入的设置李>
Binding.Parse
事件中抛出异常的
[奇怪的是,即使控件中的e.Cancel
设置为true
,也会发生数据绑定。正在验证事件处理程序。这是一个功能吗?]
附录B:对预期评论的先发制人回应
使用异常进行用户输入验证并不好
我同意。同时,模型中的属性设置程序必须验证参数,如果参数是垃圾,则抛出异常。不能有接受无效参数的模型
话虽如此,我也愿意接受其他想法。模型是否有其他方法进行输入验证并向演示文稿发送验证错误信息
这个例子就是WinForms。你为什么不使用WPF呢
我之所以使用WinForms是因为遗留问题。这似乎与.Net 3.5和.Net 4+中归类为用户未处理异常的内容有所不同。在.Net 4.0中可能没有发生此更改,因为.Net 4.5+已取代.Net 4 考虑主题代码的属性设置程序中抛出的
系统.Exception
的以下配置。以下图像是从VS2013拍摄的。VS2015+使用不同的异常设置对话框(请参阅:)。要查看用户未处理选项,需要启用“仅我的代码”调试
根据.Net 4.7编译时,当引发异常时,调试器将中断。但是,当根据.NET3.5编译时,抛出异常时调试器不会中断
如果清除“当此异常类型为用户未处理时中断”框,将获得与3.5相同的行为。如果运行时未连接调试器,则无论.Net版本如何,行为都是相同的。“4.0、4.5、4.5.2版的.Net版本不会在模型的属性设置器中捕获异常。”--我想您的意思是:“4.0、4.5、4.5.2版的.Net版本会在模型的属性设置器中捕获异常。”,这似乎是附加了调试器的未处理异常处理中的更改。如果清除“当此异常类型为用户未处理时中断”框,将获得与3.5相同的行为。如果运行时未连接调试器,则行为与.Net版本相同。@TnTinMn我不知道Visual Studio区分未处理和用户未处理。我读过,也读过。你给我指明了正确的方向。如果你从你的评论中做出回答,我会接受的。