< Components >
<!--
< Component Name = " SelectTextBox " Namespace = " STBox " Asm = " E:\Visual Studio\Projects\SBZMis\SelectTextBox\SelectTextBox\bin\Debug\SelectTextBox.dll " >
< Propertys >
< Property Name = " BackColor " Caption = " 背影色 " Group = "" />
< Property Name = " Border " Caption = " 边框样式 " Group = "" />
< Property Name = " Font " Caption = " 字体 " Group = "" />
< Property Name = " ForeColor " Caption = " 字体颜色 " Group = "" />
< Property Name = " Value " Caption = " 值 " Group = "" />
< Property Name = " MultLine " Caption = " 多行 " Group = "" />
< Property Name = " TabIndex " Caption = " Tab顺序 " Group = "" />
< Property Name = " CaptionColor " Caption = " 标题颜色 " Group = "" />
< Property Name = " EditBackColor " Caption = " 编辑框背景色 " Group = "" />
< Property Name = " LineColor " Caption = " 下划线色 " Group = "" />
< Property Name = " SameColor " Caption = " 前后同色 " Group = "" />
< Property Name = " AutoShowButton " Caption = " 自动显示按钮 " Group = "" />
< Property Name = " AutoSizeTextField " Caption = " 自动调整文本框大小 " Group = "" />
< Property Name = " ButtonCaption " Caption = " 按钮标题 " Group = "" />
< Property Name = " ButtonColor " Caption = " 按钮颜色 " Group = "" />
< Property Name = " ButtonImage " Caption = " 按钮图片 " Group = "" />
< Property Name = " CaptionFont " Caption = " 标题字体 " Group = "" />
< Property Name = " ExculdeFilter " Caption = " 不包含过虑器 " Group = "" />
< Property Name = " ExcludeFilterString " Caption = " 不包含字串 " Group = "" />
< Property Name = " IncludeFilter " Caption = " 包含过虑器 " Group = "" />
< Property Name = " IncludeFilterString " Caption = " 包含字串 " Group = "" />
< Property Name = " NoButton " Caption = " 不显示按钮 " Group = "" />
< Property Name = " TextFont " Caption = " 编辑框字体 " Group = "" />
< Property Name = " Type " Caption = " 类型 " Group = "" />
< Property Name = " ShowCaption " Caption = " 显示标题 " Group = "" />
< Property Name = " ShowScrollBar " Caption = " 显示滚动条 " Group = "" />
< Property Name = " TextAlign " Caption = " 编辑框对齐模式 " Group = "" />
</ Propertys >
< DataBinding >
</ DataBinding >
</ Component >
!-->
< Component Name = " TextBox " Namespace = " System.Windows.Forms " Asm = " System.dll " >
< Propertys >
< Property Name = " BackColor " Caption = " 背影色 " Group = "" />
< Property Name = " BorderStyle " Caption = " 边框样式 " Group = "" />
< Property Name = " Font " Caption = " 字体 " Group = "" />
< Property Name = " ForeColor " Caption = " 字色 " Group = "" />
< Property Name = " Text " Caption = " 内容 " Group = "" />
< Property Name = " ScrollBars " Caption = " 滚动条 " Group = "" />
< Property Name = " TextAlign " Caption = " 文本对齐 " Group = "" />
< Property Name = " Multline " Caption = " 多行 " Group = "" />
< Property Name = " PasswordChar " Caption = " 密码文本 " Group = "" />
< Property Name = " Size " Caption = " 大小 " Group = "" />
< Property Name = " Location " Caption = " 位置 " Group = "" />
</ Propertys >
< DataBinding >
</ DataBinding >
</ Component >
< Component Name = " Label " Namespace = " System.Windows.Forms " Asm = " System.dll " >
< Propertys >
< Property Name = " BackColor " Caption = " 背影色 " Group = "" />
< Property Name = " BorderStyle " Caption = " 边框样式 " Group = "" />
< Property Name = " Font " Caption = " 字体 " Group = "" />
< Property Name = " ForeColor " Caption = " 字色 " Group = "" />
< Property Name = " Image " Caption = " 图片 " Group = "" />
< Property Name = " ImageAlign " Caption = " 图片对齐 " Group = "" />
< Property Name = " Text " Caption = " 文字 " Group = "" />
< Property Name = " TextAlign " Caption = " 文本对齐 " Group = "" />
< Property Name = " Size " Caption = " 大小 " Group = "" />
< Property Name = " Location " Caption = " 位置 " Group = "" />
</ Propertys >
< DataBinding >
</ DataBinding >
</ Component >
< Component Name = " ListBox " Namespace = " System.Windows.Forms " Asm = " System.dll " >
< Propertys >
< Property Name = " BackColor " Caption = " 背影色 " Group = "" />
< Property Name = " BorderStyle " Caption = " 边框样式 " Group = "" />
< Property Name = " Font " Caption = " 字体 " Group = "" />
< Property Name = " ForeColor " Caption = " 字色 " Group = "" />
< Property Name = " FormatString " Caption = " 格式串 " Group = "" />
< Property Name = " FormattingEnabled " Caption = " 启用格式串 " Group = "" />
< Property Name = " Items " Caption = " 列表项目 " Group = "" />
< Property Name = " MultColumn " Caption = " 多列 " Group = "" />
< Property Name = " IntegralHeight " Caption = " 整数高度 " Group = "" />
< Property Name = " Size " Caption = " 大小 " Group = "" />
< Property Name = " Location " Caption = " 位置 " Group = "" />
</ Propertys >
< DataBinding >
</ DataBinding >
</ Component >
< Component Name = " Button " Namespace = " System.Windows.Forms " Asm = " System.dll " >
< Propertys >
< Property Name = " BackColor " Caption = " 背影色 " Group = "" />
< Property Name = " BorderStyle " Caption = " 边框样式 " Group = "" />
< Property Name = " Font " Caption = " 字体 " Group = "" />
< Property Name = " ForeColor " Caption = " 字色 " Group = "" />
< Property Name = " FlatStyle " Caption = " 样式 " Group = "" />
< Property Name = " Text " Caption = " 文本 " Group = "" />
< Property Name = " Size " Caption = " 大小 " Group = "" />
< Property Name = " Location " Caption = " 位置 " Group = "" />
< Property Name = " ImageList " Caption = " 图象 " Group = "" />
< Property Name = " ImageAlign " Caption = " 图象对其的方式 " Group = "" />
< Property Name = " Image " Caption = " 控件显示的图象 " Group = "" />
</ Propertys >
< DataBinding >
</ DataBinding >
</ Component >
</ Components >
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using System.Xml;
using System.Windows.Forms;
namespace WindowsApplication1
{
class CustomProperty : ICustomTypeDescriptor
{
//当前选择对象
private object mCurrentSelectObject;
private Dictionary<string, string> mObjectAttribs = new Dictionary<string, string>();
public CustomProperty(object pSelectObject, XmlNodeList pObjectPropertys)
{
mCurrentSelectObject = pSelectObject;
XmlNode tmpXNode;
IEnumerator tmpIe = pObjectPropertys.GetEnumerator();
while (tmpIe.MoveNext())
{
tmpXNode = tmpIe.Current as XmlNode;
mObjectAttribs.Add(tmpXNode.Attributes["Name"].Value, tmpXNode.Attributes["Caption"].Value);
}
}
ICustomTypeDescriptor Members#region ICustomTypeDescriptor Members
public AttributeCollection GetAttributes()
{
return TypeDescriptor.GetAttributes(mCurrentSelectObject);
}
public string GetClassName()
{
return TypeDescriptor.GetClassName(mCurrentSelectObject);
}
public string GetComponentName()
{
return TypeDescriptor.GetComponentName(mCurrentSelectObject);
}
public TypeConverter GetConverter()
{
return TypeDescriptor.GetConverter(mCurrentSelectObject);
}
public EventDescriptor GetDefaultEvent()
{
return TypeDescriptor.GetDefaultEvent(mCurrentSelectObject);
}
public PropertyDescriptor GetDefaultProperty()
{
return TypeDescriptor.GetDefaultProperty(mCurrentSelectObject);
}
public object GetEditor(Type editorBaseType)
{
return TypeDescriptor.GetEditor(mCurrentSelectObject, editorBaseType);
}
public EventDescriptorCollection GetEvents(Attribute[] attributes)
{
return TypeDescriptor.GetEvents(mCurrentSelectObject, attributes);
}
public EventDescriptorCollection GetEvents()
{
return TypeDescriptor.GetEvents(mCurrentSelectObject);
}
public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
{
List<CustomPropertyDescriptor> tmpPDCLst = new List<CustomPropertyDescriptor>();
PropertyDescriptorCollection tmpPDC = TypeDescriptor.GetProperties(mCurrentSelectObject, attributes);
IEnumerator tmpIe = tmpPDC.GetEnumerator();
CustomPropertyDescriptor tmpCPD;
PropertyDescriptor tmpPD;
while (tmpIe.MoveNext())
{
tmpPD = tmpIe.Current as PropertyDescriptor;
if (mObjectAttribs.ContainsKey(tmpPD.Name))
{
tmpCPD = new CustomPropertyDescriptor(mCurrentSelectObject, tmpPD);
tmpCPD.SetDisplayName(mObjectAttribs[tmpPD.Name]);
tmpCPD.SetCategory(tmpPD.Category + "中文");
tmpPDCLst.Add(tmpCPD);
}
}
return new PropertyDescriptorCollection(tmpPDCLst.ToArray());
}
public PropertyDescriptorCollection GetProperties()
{
return TypeDescriptor.GetProperties(mCurrentSelectObject);
}
public object GetPropertyOwner(PropertyDescriptor pd)
{
return mCurrentSelectObject;
}
#endregion
class CustomPropertyDescriptor : PropertyDescriptor
{
private PropertyDescriptor mProp;
private object mComponent;
public CustomPropertyDescriptor(object pComponent, PropertyDescriptor pPD)
: base(pPD)
{
mCategory = base.Category;
mDisplayName = base.DisplayName;
mProp = pPD;
mComponent = pComponent;
}
private string mCategory;
public override string Category
{
get { return mCategory; }
}
private string mDisplayName ;
public override string DisplayName
{
get { return mDisplayName; }
}
public void SetDisplayName(string pDispalyName)
{
mDisplayName = pDispalyName;
}
public void SetCategory(string pCategory)
{
mCategory = pCategory;
}
public override bool CanResetValue(object component)
{
return mProp.CanResetValue(component);
}
public override Type ComponentType
{
get { return mProp.ComponentType; }
}
public override object GetValue(object component)
{
return mProp.GetValue(component);
}
public override bool IsReadOnly
{
get { return mProp.IsReadOnly; }
}
public override Type PropertyType
{
get { return mProp.PropertyType; }
}
public override void ResetValue(object component) { mProp.ResetValue(component); }
public override void SetValue(object component, object value) { mProp.SetValue(component, value); }
public override bool ShouldSerializeValue(object component)
{
return mProp.ShouldSerializeValue(component);
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Collections;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
XmlDocument mXDoc = new XmlDocument();
public Form1()
{
InitializeComponent();
mXDoc.Load(Application.StartupPath + "\\Components.xml");
}
private void button1_Click(object sender, EventArgs e)
{
XmlNode tmpXNode = mXDoc.SelectSingleNode("Components/Component[@Name=\"Button\"]");
XmlNodeList tmpXPropLst = tmpXNode.SelectNodes("Propertys/Property");
CustomProperty cp = new CustomProperty(sender, tmpXPropLst);
propertyGrid1.SelectedObject = cp;
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
XmlNode tmpXNode = mXDoc.SelectSingleNode("Components/Component[@Name=\"ListBox\"]");
XmlNodeList tmpXPropLst = tmpXNode.SelectNodes("Propertys/Property");
CustomProperty cp = new CustomProperty(sender, tmpXPropLst);
propertyGrid1.SelectedObject = cp;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox1_MouseDown(object sender, MouseEventArgs e)
{
XmlNode tmpXNode = mXDoc.SelectSingleNode("Components/Component[@Name=\"TextBox\"]");
XmlNodeList tmpXPropLst = tmpXNode.SelectNodes("Propertys/Property");
CustomProperty cp = new CustomProperty(sender, tmpXPropLst);
propertyGrid1.SelectedObject = cp;
}
private void label1_MouseDown(object sender, MouseEventArgs e)
{
XmlNode tmpXNode = mXDoc.SelectSingleNode("Components/Component[@Name=\"Label\"]");
XmlNodeList tmpXPropLst = tmpXNode.SelectNodes("Propertys/Property");
CustomProperty cp = new CustomProperty(sender, tmpXPropLst);
propertyGrid1.SelectedObject = cp;
}
}
}