zoukankan      html  css  js  c++  java
  • Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器

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

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

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

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

     18
     19        protected override void OnPaint(PaintEventArgs e)
     20        {
     21            base.OnPaint(e);
     22            e.Graphics.DrawRectangle(Pens.Red, new Rectangle(Point.Empty, new Size(Width - 1, Height - 1)));
     23        }

     24
     25    }

     26
     27    简单的自定义类型
     56
     57    简单的自定义类型的类型转换器
    108}

    109

    编译, 拖到windows窗体上,点击查看属性浏览器,


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

    再编译......查看属性浏览器


    OK了
    The end.
  • 相关阅读:
    任天堂确认账户被黑客入侵:开启双重验证是关键,会更加安全
    受疫情影响!美国大量科技初创企业要挨饿或倒闭
    泰国的IPv6功能已从约2%增至30%,部署率位于全球5名
    vue钩子函数
    vue自定义全局指令directive和局部指令directives
    vue自定义按键修饰符
    字符串padStart、padEnd填充
    vue过滤器
    vue指令v-if和v-show
    vue指令v-for和key属性
  • 原文地址:https://www.cnblogs.com/luqingfei/p/674682.html
Copyright © 2011-2022 走看看