快速业务通道

Asp.net 3.5控件和组件开发技术系列—服务器控件属性(五)

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

4.7  实现自定义属性

在本章前面的章节中我们实现的许多功能都是借助于系统提供的设计时元数据属性支持实现的 ,如:

显示属性描述信息的Description 属性

[Description("描述文本")]

指定属性在属性窗口中类别的Category 设计属性

[Category(" 属性窗口中的类别名称")]

指定属性编辑器的Editor 设计属性

[Editor(typeof(FileNameEditor), typeof(UITypeEditor))]

指定属性类型转换器的TypeConverter 设计属性

[TypeConverter(typeof(SolidCoordinateConverter))]

这些都是系统提供的,每个属性都有它自己的功能。那么如果我们想自定义一个设计属性,实 现自定义的功能,该怎么实现呢?要设计自定义属性,仅需要直接或间接地从System.Attribute 派生即可,与传统类功能完全一样。我们既可以使用System.Attribute 来定义控件设计期控制, 也可以用System.Attribute 指定运行时的控制。

本节就以一个示例演示控件中的设计属性是怎么实现的。首先还是先说明一下本节控件属性要 实现的功能,如图4-35 所示。

此控件具有一个Num 属性,允许开发人员指定一个值。在控件的属性上指定了一个NumValidate 类型的验证属性,该属性需要传入两个参数,供开发人员指定区间,如果在属性窗口中指定的属性 不在区间内,则会有警告提示(如图4-36 中红色警告提示)。

图4-36  控件设计属性示例

或许读者会想这不就是一个验证输入的简单功能吗?这里与我们之前做的验证的情况是不一样 的。之前我们经常用的验证方式是页面在浏览器中运行时的验证,即对用户输入的验证;而这里是 在IDE 设计器界面验证,是在控件设计模式下的验证,是对使用控件的开发人员进行输入验证,而 不是对最终用户输入验证。

本示例就是用来讲解怎样在设计模式下设置和获取我们自己定义的设计属性。还是从代码开始 ,NumValidate 属性的源代码如下:

/// <summary>
/// 获得本书更多内容,请看:
/// http://blog.csdn.net/ChengKing/archive/2008/08/18/2792440.aspx
/// </summary>

/// <summary>
/// 自定义属性类(实现验证功能)
/// </summary>
[AttributeUsage(AttributeTargets.Property,AllowMultiple=true,Inherited=true)]
public class NumValidateAttribute : Attribute 
{
   /// <summary>
   /// 构造方法 
   /// </summary>
   /// <param name="intMinValue">最小值</param>
   /// <param name="intMaxValue">最大值</param>
   public NumValidateAttribute(int intMinValue, int intMaxValue)
   {
     this.intMinValue = intMinValue;
     this.intMaxValue = intMaxValue;
   }

   private int intMinValue;
   /// <summary>
   /// 最大值 
   /// </summary>
   public int MinValue 
   {
     get
     {
       return intMinValue;
     }
   }

   private int intMaxValue;
   /// <summary>
   /// 最小值 
   /// </summary>
   public int MaxValue 
   {
     get
     {
       return intMaxValue;
     }
   }

   /// <summary>
   /// 执行验证 
   /// </summary>
   /// <param name="value"></param>
   /// <returns></returns>
   public bool ValidateResult(int value)
   {
     if (this.intMinValue <= value && value <=  this.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号