IExtenderProvider 接口的应用.实现自定义组件LilyValidateProvider

今天在 www.codeproject.com 上看到一段源代码,如何验证文本框输入的字符是否在合法的范围之类,不过实际应用起来有点麻烦,只是针对了TextBox,虽然经过改进可以支持Comobox,不过使用起来不直接(我太懒了).

突然想到如果能使用ToolTip控件一样进行设置就好了.特别是当前窗体上需要进行验证的控件比较多时.

说干就干.通过MSDN发现Tootip具有接口IExtenderProvider.我想估计是这玩意.
IExtenderProvider介绍:
扩展程序提供程序是一个向其他组件提供属性的组件。例如,ToolTip 控件即是一个扩展程序提供程序。当向某个 Form 添加 ToolTip 控件时,将向该窗体上的所有其他控件的属性列表中添加 ToolTip 属性。

提供扩展程序属性的任何组件都必须实现 IExtenderProvider。然后,可视化设计器可以调用 CanExtend 来确定容器中的哪些对象应收到扩展程序属性。

我们发现只能要实现接口的方法CanExtend方法就能实现ToolTip的效果.

不过我们要注意以下几点(摘至MSDN)

  • 扩展程序提供程序 HelpLabel 实现 IExtenderProvider
  • HelpLabel 本身是 Windows 窗体控件,因而从 Control 派生。
  • CanExtend 方法对于任何控件都返回“true”,但 HelpLabel 除外(原因是在属性自身上进行扩展是无意义的)。
  • HelpLabel 具有一个名为 GetHelpText 的方法,该方法获取 HelpLabel 使其可为其他控件使用的属性。SetHelpText 方法设置该属性的值。请注意,扩展属性由 GetHelpTextSetHelpText 方法提供,并且 HelpLabel 不公开名为 HelpText 的属性。

    注:SetHelpTextGetHelpText 是成对出现的.
     这里有MSDN的一个例子:ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconwinformsextenderprovidersample.htm 很详细的.

这里有一个问题不清楚.方法的类型只能是基本数据类型吗?不能使用自定义类吗?如果要设置的方法比较多,这样就太麻烦?我试了老是出错,调试不能通过!

LilyValidateProvider组件的全部代码





 

原文地址:https://www.cnblogs.com/zqonline/p/488932.html