PropertyGrid 用法(汉化属性)

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

有的朋友,肯定用到了PropertyGrid中要将一个对像的属性给汉化过来,以合适咱们中国人的习惯.

其实这个汉化,ms是支持的:请瞧下面的代码,你只需要copy,然后做为你的对像的父类,然后在你的对像的属性上加入中文意思,就搞定了。一切都那么简单:

#region 所有要放在PropertyGird中的对像的基类.

public class BaseObject : ICustomTypeDescriptor

{

private PropertyDescriptorCollection globalizedProps;

public String GetClassName()

{

return TypeDescriptor.GetClassName(this,true);

}

public AttributeCollection GetAttributes()

{

return TypeDescriptor.GetAttributes(this,true);

}

public String GetComponentName()

{

return TypeDescriptor.GetComponentName(this, true);

}

public TypeConverter GetConverter()

{

return TypeDescriptor.GetConverter(this, true);

}

public EventDescriptor GetDefaultEvent()

{

return TypeDescriptor.GetDefaultEvent(this, true);

}

public PropertyDescriptor GetDefaultProperty()

{

return TypeDescriptor.GetDefaultProperty(this, true);

}

public object GetEditor(Type editorBaseType)

{

return TypeDescriptor.GetEditor(this, editorBaseType, true);

}

public EventDescriptorCollection GetEvents(Attribute[] attributes)

{

return TypeDescriptor.GetEvents(this, attributes, true);

}

public EventDescriptorCollection GetEvents()

{

return TypeDescriptor.GetEvents(this, true);

}

public PropertyDescriptorCollection GetProperties(Attribute[] attributes)

{

if ( globalizedProps == null)

{

PropertyDescriptorCollection baseProps = TypeDescriptor.GetProperties(this, attributes, true);

globalizedProps = new PropertyDescriptorCollection(null);

foreach( PropertyDescriptor oProp in baseProps )

{

globalizedProps.Add(new GlobalizedPropertyDescriptor(oProp));

}

}

return globalizedProps;

}

public PropertyDescriptorCollection GetProperties()

{

if ( globalizedProps == null)

{

PropertyDescriptorCollection baseProps = TypeDescriptor.GetProperties(this, true);

globalizedProps = new PropertyDescriptorCollection(null);

foreach( PropertyDescriptor oProp in baseProps )

{

globalizedProps.Add(new BasePropertyDescriptor(oProp));

}

}

return globalizedProps;

}

public object GetPropertyOwner(PropertyDescriptor pd)

{

return this;

}

}

#endregion

#region 所以要放在PropertyGird中的对像的描绘进行重写

public class BasePropertyDescriptor : PropertyDescriptor

{

private PropertyDescriptor basePropertyDescriptor;

public BasePropertyDescriptor(PropertyDescriptor basePropertyDescriptor) : base(basePropertyDescriptor)

{

this.basePropertyDescriptor = basePropertyDescriptor;

}

public override bool CanResetValue(object component)

{

return basePropertyDescriptor.CanResetValue(component);

}

public override Type ComponentType

{

get { return basePropertyDescriptor.ComponentType; }

}

public override string DisplayName

{

get

{

string svalue = "";

foreach(Attribute attribute in this.basePropertyDescriptor.Attributes)

{

if (attribute is showChinese)

{

svalue = attribute.ToString();

break;

}

}

if (svalue == "") return this.basePropertyDescriptor.Name;

else return svalue;

}

}

public override string Description

{

get

{

return this.basePropertyDescriptor.Description;

}

}

public override object GetValue(object component)

{

return this.basePropertyDescriptor.GetValue(component);

}

public override bool IsReadOnly

{

get { return this.basePropertyDescriptor.IsReadOnly; }

}

public override string Name

{

get { return this.basePropertyDescriptor.Name; }

}

public override Type PropertyType

{

get { return this.basePropertyDescriptor.PropertyType; }

}

public override void ResetValue(object component)

{

this.basePropertyDescriptor.ResetValue(component);

}

public override bool ShouldSerializeValue(object component)

{

return this.basePropertyDescriptor.ShouldSerializeValue(component);

}

public override void SetValue(object component, object value)

{

this.basePropertyDescriptor.SetValue(component, value);

}

}

#endregion

#region 自定义属性用来显示左的边的汉字

[AttributeUsage(AttributeTargets.Property)]

public class showChinese : System.Attribute

{

private string sChineseChar = "";

public showChinese(string sChineseChar)

{

this.sChineseChar = sChineseChar;

}

public string ChineseChar

{

get

{

return this.sChineseChar;

}

}

public override string ToString()

{

return this.sChineseChar;

}

}

#endregion

用法如下:

public class testA : BaseObject

{

[

CategoryAttribute("全局设置"),

ReadOnlyAttribute(false),

DescriptionAttribute("流程的显示中文名称."),

showChinese("流程名称:") //在这儿用这个就行了。哈哈。

]

public string FlowName

{

get { return strFlowName; }

set { strFlowName = value; }

}

}

快点copy ,try 一下呀。有什么问题,请大家指证呀。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航