65.9K
CodeProject 正在变化。 阅读更多。
Home

可自定义的 ErrorProviders

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.24/5 (5投票s)

2006 年 10 月 2 日

CPOL

3分钟阅读

viewsIcon

47898

downloadIcon

1320

一个用于可自定义 ErrorProviders 的基类, 该类允许您控制错误的显示方式

Sample Image - CustomErrorProviders.png

引言

Windows 窗体 ErrorProvider 控件和 IDataErrorInfo 接口提供了一种非常强大的方式来自动验证对象和显示错误。但是,您可能会发现内置的 ErrorProvider 显示错误的方式有些受限。例如,您可能更希望显示 MessageBox,而不是显示内置的闪烁的红色图标,或者更改无效控件的背景颜色。这个示例项目提供了一个 SmartErrorProviderBase 类,允许您连接到验证系统并自定义错误消息的显示方式。

注意 1:如果您还没有使用过 Windows 窗体 ErrorProviderIDataErrorInfo 接口,请参阅我之前关于 委托和业务对象 的文章。

注意 2:附加到这篇文章的代码是撰写时的当前版本。任何更新都将上传到 这里

特点

SmartErrorProviderBase 类实现了 IExtenderProvider 接口,并且设计为在使用前进行子类化。它为您提供了两个功能

  1. 它引发一个 BindingValidated 事件,您可以在其中订阅以控制如何显示错误消息。
  2. 它提供了一个 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 日:初始帖子
© . All rights reserved.