<?
xml version
=
"
1.0
"
encoding
=
"
gb2312
"
?>
<
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;
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;
}
}
}