可自定义的 ErrorProviders






4.24/5 (5投票s)
一个用于可自定义 ErrorProviders 的基类,

引言
Windows 窗体 ErrorProvider
控件和 IDataErrorInfo
接口提供了一种非常强大的方式来自动验证对象和显示错误。但是,您可能会发现内置的 ErrorProvider
显示错误的方式有些受限。例如,您可能更希望显示 MessageBox
,而不是显示内置的闪烁的红色图标,或者更改无效控件的背景颜色。这个示例项目提供了一个 SmartErrorProviderBase
类,允许您连接到验证系统并自定义错误消息的显示方式。
注意 1:如果您还没有使用过 Windows 窗体 ErrorProvider
或 IDataErrorInfo
接口,请参阅我之前关于 委托和业务对象 的文章。
注意 2:附加到这篇文章的代码是撰写时的当前版本。任何更新都将上传到 这里。
特点
SmartErrorProviderBase
类实现了 IExtenderProvider
接口,并且设计为在使用前进行子类化。它为您提供了两个功能
- 它引发一个
BindingValidated
事件,您可以在其中订阅以控制如何显示错误消息。 - 它提供了一个
ShowErrorsImmediately
属性。有时,您可能不希望在用户实际聚焦于控件之前显示错误消息。将此属性设置为false
会抑制任何错误消息,直到用户从该控件切换开。
当您将 SmartErrorProviderBase
或其派生类之一拖到您的窗体上时,您需要设置两个属性。第一个是 DataSource
,它应该与您的 UI 控件绑定的类相同,并且应该实现 System.ComponentModel.IDataErrorInfo
接口。第二个是 ContainerControl
属性。这只是用于让 Error Provider 找到窗体上的所有绑定,并且几乎总是应该设置为您的 Form
。不知何故,内置的 ErrorProvider
设法自动设置了这一点,但我无法弄清楚如何做到这一点。
示例
我在示例代码中包含了两个示例实现,尽管希望大多数人会扩展这些以满足自己的要求。这两个示例是
BackgroundColorErrorProvider
此 ErrorProvider
仅更改任何无效控件的背景颜色。您可以在 BackgroundColorErrorProvider
上指定单个错误颜色(默认为红色)作为属性,或者由于 BackgroundColorErrorProvider
IExtenderProvider
实现提供的 ErrorBackColor
属性,您可以为各个控件设置颜色。
ErrorMessageList
这实际上是一个 UserControl
,其中包含一个 SmartErrorProviderBase
以及一个 ListView
,并使用 ListView
来显示错误消息。当您单击其中一条错误消息时,焦点会更改为无效的控件。
尽情享用!
我希望代码是相当不言自明的。如果对相同类型的 ErrorProvider
显示有大量请求,我将考虑将其添加到示例代码中。请注意,这是一个粗略的实现,虽然它似乎运行良好,但可能隐藏着我没有遇到过的错误,因此请自行承担使用这些类的风险。 :)
历史
- 2006 年 10 月 2 日:初始帖子