PropertyGrid属性值的汉化

PropertyGrid是微软提供的一个非常智能化的控件,能够把对象的属性自动显示出来并能让用户修改。

并且在VS.net2005中,已经支持中文变量名,但是很多时候这还不够,某些时候我们需要把值也汉化。否则属性控件中的属性名称是中文了,而属性值还是英文的!

此时我们可以使用TypeConverter.

下面的例子把Person类的成年属性布尔值汉化:

using System.ComponentModel;  

class BoolValueConverter: TypeConverter
    {
        private bool[] values;
        private string[] names;
        BoolValueConverter()
        {
            values = new bool[2] { true, false };
        }
        public override bool GetStandardValuesSupported(System.ComponentModel.ITypeDescriptorContext context)
        {
            return true;
        }
        public override StandardValuesCollection GetStandardValues(System.ComponentModel.ITypeDescriptorContext context)
        {
            return  new StandardValuesCollection(values);
        }
        public override bool CanConvertFrom(System.ComponentModel.ITypeDescriptorContext context, Type sourceType)
        {
            if (sourceType == typeof(string))
                return true;
            else
                return base.CanConvertFrom(context, sourceType);
        }
        public override object ConvertTo(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
        {
            if ( destinationType== typeof(string))
            {
                if ((bool)value == true)
                    return "是";
                else
                    return "否";
            }
            return base.ConvertTo(context, culture, value, destinationType);
        }
        public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
        {
            if (value.GetType() == typeof(string))
            {
                if ((string)value == "是")
                    return true;
                else
                    return false;
            }
            return base.ConvertFrom(context, culture, value);
        }
    }
 

    class Person    {
        private bool m_bAdault;
        
        [TypeConverter(typeof(BoolValueConverter))]
        public bool 成年
        {
            get
            {
                return m_bAdault;
            }
            set
            {
                m_bAdault = value;
            }
        }
    }

则属性"成年"在属性控件中的布尔值会被汉化!

试一下在窗体上放一个propertygrid, 把SelectedObject设置成 new Person()即可看到效果!

你可能感兴趣的:(String,object,Class,微软)