• 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组件的全部代码





     

  • 相关阅读:
    python笔记---@classmethod @staticmethod
    python笔记--socket编程
    python笔记--异常处理
    WebStorm 配置
    ECS node 环境搭建
    spm + host
    Untuntu的apt 终端命令
    Ubuntu 添加至启动栏
    Ubuntu设置镜像源
    Ubuntu 设置中文语言环境
  • 原文地址:https://www.cnblogs.com/zqonline/p/488932.html
Copyright © 2020-2023  润新知