PropertyGrid中的枚举显示为中文

Posted Joan的园子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PropertyGrid中的枚举显示为中文相关的知识,希望对你有一定的参考价值。

参考http://www.cnblogs.com/yank/archive/2011/09/17/2179598.html

在上述文档的基础上做了改进。从EnumConverter类派生

显示效果:

1、定义枚举:在枚举中加入描述信息,作为我们需要显示的信息;

enum MediaType
    {
        [Description("文本")]
        Text = 0,
        [Description("图片")]
        Image = 1,
        [Description("视频")]
        Video = 2     
    }

2、定义TypeConverter,对枚举进行转换;

class EnumTypeConverter:EnumConverter
    {
        private Type _enumType;

        public EnumTypeConverter(Type type): base(type)
        {
            _enumType = type;
        }

        public override bool CanConvertTo(ITypeDescriptorContext context,Type destType)
        {
            return destType == typeof(string);
        }

        public override object ConvertTo(ITypeDescriptorContext context,CultureInfo culture,object value, Type destType)
        {
            FieldInfo fi = _enumType.GetField(Enum.GetName(_enumType, value));
            DescriptionAttribute da =(DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute));

            if (da != null)
                return da.Description;
            else
                return value.ToString();
        }

        public override bool CanConvertFrom(ITypeDescriptorContext context,Type srcType)
        {
            return srcType == typeof(string);
        }

        public override object ConvertFrom(ITypeDescriptorContext context,CultureInfo culture,object value)
        {
            foreach (FieldInfo fi in _enumType.GetFields())
            {
                DescriptionAttribute da =(DescriptionAttribute)Attribute.GetCustomAttribute(fi, typeof(DescriptionAttribute));

                if ((da != null) && ((string)value == da.Description))
                    return Enum.Parse(_enumType, fi.Name);
            }
            return Enum.Parse(_enumType, (string)value);
        }
    }

3、属性使用TypeConverter;

class MediaInfo
    {

        [Category("媒体类型"), DisplayName("名称"), Description("Media Type")]
        public string MediaName { get; set; }

        [DisplayName("媒体类型"), Description("Media Type")]
        [Category("媒体类型"),TypeConverter(typeof(EnumTypeConverter))]
        public MediaType MediaTypeDisplay { get; set; }
                
        public int ID { get; set; }
    }

 

以上是关于PropertyGrid中的枚举显示为中文的主要内容,如果未能解决你的问题,请参考以下文章

easyui-属性表格-easyui-propertygrid-列名显示英文官方文档无修改方案

寻找代码以呈现显示对象视图的表单

C#基础系列:开发自己的窗体设计器(PropertyGrid显示中文属性名)

PropertyGrid:仅为特定属性删除自定义数据类型的属性

c#用propertyGrid控件

如何让PropertyGrid显示控件的Name属性