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()即可看到效果!