Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器

      什么叫类型转换器?
.NET Framework 类库为常见数据类型(如整数、小数、布尔值和其他数据)提供了类型转换器。类型转换器的目的通常是用来提供字符串到数值的转换(从字符串数据转换为其他数据类型)。常见数据类型与默认类型转换器(将数值转换为字符串,并将字符串转换为相应数据类型)相关联。如果定义了自定义(即,非标准)数据类型的属性,则应用的属性必须将类型转换器指定为与该属性相关联。

      前篇文章中的为何没有用到, 其实它也用到了, 因为它用的是系统自带的类型int, 类型转换器已经由系统自动提供了.
     如果我们使用了自己定义的类型, 因为系统中没有相应的类型转换器, 这就需要我们写一个类型转换器.

     下面我们写一个稍稍复杂点的属性, 它是由简单的类型加简单的属性组合而成的,(没有晕吧),
也就是说我要自已定义一个类型, 而不用系统自带的类型(比如前篇文章中的int类型)

      下面就是拥有一个简单的复杂属性的简单控件, Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
  1 Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器 using  System.ComponentModel;
  2 Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器 using  System.Windows.Forms;
  3 Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器 using  System.Drawing;
  4 Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
  5 Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器 namespace  CustomControlSample
  6 Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器 {
  7Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器    public class SimpleComplexProperty : Control
  8Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器    {
  9Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        private SimpleCustomType complexField;
 10Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
 11Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        [Category("我是复杂的属性哦!")]
 12Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        [Description("我是简单的复杂属性,因为我是由简单的类型和简单的方式定义的。\n定义我的类型很简单,只有两个属性(Min, Max);定义我的body也很简单,只是简单的get, set.")]
 13Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        public SimpleCustomType ComplexProperty
 14Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        {
 15Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器            get return complexField; }
 16Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器            set { complexField = value; }
 17Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        }

 18Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
 19Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        protected override void OnPaint(PaintEventArgs e)
 20Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        {
 21Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器            base.OnPaint(e);
 22Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器            e.Graphics.DrawRectangle(Pens.Red, new Rectangle(Point.Empty, new Size(Width - 1, Height - 1)));
 23Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        }

 24Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
 25Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器    }

 26Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
 27Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器    简单的自定义类型
 56Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
 57Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器    简单的自定义类型的类型转换器
108Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器}

109 Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器

编译, 拖到windows窗体上,点击查看属性浏览器,
Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器

wow, 是灰色的,不能使用. 为啥?
..... 那是因为属性浏览器不知道如何转换我的属性,
我们不是写了类型转换器了吗? 没有被使用, ...
又要用到Attribute了,这真是个好东西呀
在上面的代码中的属性ComplexProperty 用TypeConverter (TypeConverterAttribute的缩写)指定一下我们自定义的类型的类型转换器即可.
Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器         [TypeConverter( typeof (SimpleCustomTypeConverter))]
Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        
public  SimpleCustomType ComplexProperty
Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        
{
Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器            
get return complexField; }
Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器            
set { complexField = value; }
Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器        }

再编译......查看属性浏览器
Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器

OK了
The end.

你可能感兴趣的:(WinForm)