PropertyGrid中的枚举显示为中文

时间:2023-03-08 22:23:16

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

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

显示效果:

PropertyGrid中的枚举显示为中文

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

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

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; }
}