PropertyGrid的用法---汉化及对自定义类对象属性的支持

还是来看程序:

 

 

     //定义了一个类

 

        class test

 

        {

 

 

            //性别属性

 

            private string sex;

 

            [Category("数据"), Browsable(true), ReadOnly(true), DisplayName("")]

 

//Category是分类,DisplayName这里起到汉化的作用,Browsable是否可见,ReadOnly是否只读

 

            public string Sex

 

            {

 

                get

 

                {

 

                    return  sex;

 

                }

 

                set

 

                {

 

                    sex = value;

 

                }

 

            }

 

            //姓名属性

 

            private string name;

 

            [Category("数据"), Browsable(true), ReadOnly(false), DisplayName("姓名")]

 

                 public string  Name

 

                {

 

                    get

 

                    {

 

                        return name;

 

                    }

 

                    set

 

                    {

 

                        name = value;

 

                    }

 

               }

 

            //年龄属性

 

            private int age;

 

            [Category("数据"), Browsable(true), ReadOnly(true), DisplayName("年龄")]        

 

               public int Age

 

               {

 

                   get

 

                   {

 

                       return age;

 

                   }

 

                   set

 

                   {

 

                       age = value;

 

                   }

 

               }

 

//专业技能属性,这里表现为一个自定义类的对象

 

            [Category("专业技能"), Browsable(true), ReadOnly(true)]

 

            private Professional profession = new Professional(".net,java", "sqlserver,oracle");

 

            public Professional Profession

 

            {

 

                set

 

                {

 

                    profession = value;

 

                }

 

                get

 

                {

 

                    return profession;

 

                }

 

            }

 

            //系统自带类对象属性

 

            private Size windowSize = new Size(100, 100);

 

            [CategoryAttribute("文档设置")]

 

            public Size WindowSize

 

            {

 

                get { return windowSize; }

 

                set { windowSize = value; }

 

            }

 

            private Font windowFont = new Font("宋体", 9, FontStyle.Regular);

 

            [CategoryAttribute("文档设置")]

 

            public Font WindowFont

 

            {

 

                get { return windowFont; }

 

                set { windowFont = value; }

 

            }

 

 

}

 

//使用TypeConverterAttribute为自定义类型转换器指定目标类

 

        [TypeConverterAttribute(typeof(ProfessionalConverter)), DescriptionAttribute("部分专业技能。"),DisplayName("专长")]

 

        public class Professional//自定义Professional

 

        {

 

            public Professional(string lang, string db)

 

            {

 

                language = lang;

 

                database = db;

 

            }

 

            private string language;

 

            [Category("数据"), Browsable(true), ReadOnly(true), DisplayName("语言")]     

 

            public string Language//语言属性

 

            {

 

                set

 

                {

 

                    language = value;

 

                }

 

                get

 

                {

 

                    return language;

 

                }

 

            }

 

            private string database;

 

            [Category("数据"), Browsable(true), ReadOnly(true), DisplayName("数据库")]     

 

            public string Database//数据库属性

 

            {

 

                set

 

                {

 

                    database = value;

 

                }

 

                get

 

                {

 

                    return database;

 

                }

 

            }

 

        }

 

//以下为类型转换类,这样自定义类Professional的属性才能扩展开来

 

        public class ProfessionalConverter : ExpandableObjectConverter

 

        {

 

            //这里将对象属性转换为String(显示属性)

 

            public override bool CanConvertTo(ITypeDescriptorContext context, System.Type destinationType)

 

            {

 

                if (destinationType == typeof(Professional))

 

                    return true;

 

                else

 

                    return base.CanConvertTo(context, destinationType);

 

            }

 

            public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, System.Type destinationType)

 

            {

 

                if (destinationType == typeof(System.String) && value is Professional)

 

                {

 

 

                    Professional so = (Professional)value;

 

 

                    return "语言:" + so.Language + ",数据库: " + so.Database;

 

 

                }

 

                return base.ConvertTo(context, culture, value, destinationType);

 

            }

 

           

 

            //String重新转换成对象属性(编辑后写回)

 

            public override bool CanConvertFrom(ITypeDescriptorContext context, System.Type sourceType)

 

            {

 

                if (sourceType == typeof(string))

 

                    return true;

 

                else

 

                    return base.CanConvertFrom(context, sourceType);

 

            }

 

            public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)

 

            {

 

                if (value is string)

 

                {

 

                    try

 

                    {

 

                        string s = (string)value;

 

                        string[] str = new string[4];

 

                        str = s.Split(new char[] { ':', ',' });

 

                        Professional so = new Professional( str[1],str[3]);

 

                        return so;

 

                    }

 

                    catch

 

                    {

 

                        throw new ArgumentException("无法将" + (string)value + "转换为Professional 类型");

 

                    }

 

                }

 

                return base.ConvertFrom(context, culture, value);

 

 

 

            }

 

        }

 

基本的用法就这样了,还不是很熟练。大家多多指教。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值