PropertyGrid是.Net控件里比较复杂的一个,使用起来也很灵活 。
前短时间工作关系接触PropertyGrid比较多,把心得总结一下,也怕下次再用到的时候忘记:
先说自定义UI:
首先说说自定义UI使用的场合,自定义UI一般使用在PropertyGrid本身的属性编辑界面不能满足需求的时候,这时候需要把自己定义的编辑界面加入到PropertyGrid的属性编辑器里面。自定义UI基本有两种界面表现形式:下拉式(点击向下的小箭头下拉出一个编辑界面),和弹出式(出现三个小圆点的按钮,点击弹出编辑对话框)。
下面说说具体实现方法:
1. 实现自定义UI需要首先设计自定义的编辑控件,一般从UserControl或者Form集成。
2. 继承UITypeEditor类,并override方法GetEditStyle()和EditValue()。GetEditStyle()方法用于指定是下拉式还是弹出式,下拉式:return UITypeEditorEditStyle.DropDown; 弹出式:return UITypeEditorEditStyle.Modal;
EditValue()方法是实现自定义UI的关键,具体见以下代码:
public class CustomEditor : UITypeEditor
{
public CustomEditor ()
{
}
public override UITypeEditorEditStyle GetEditStyle(
ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(ITypeDescriptorContext context,
IServiceProvider provider, object value)
{
IWindowsFormsEditorService wfes = provider.GetService(
typeof(IWindowsFormsEditorService)) as
IWindowsFormsEditorService;
if (wfes != null)
{
// 在这里根据value值初始化自定义的控件,并把编辑以后的值赋值给value参数
}
return value;
}
}
3. 设置PropertyGrid相应属性的Editor特性
[Editor(typeof(CustomEditor ), typeof(System.Drawing.Design.UITypeEditor))]
前短时间工作关系接触PropertyGrid比较多,把心得总结一下,也怕下次再用到的时候忘记:
先说自定义UI:
首先说说自定义UI使用的场合,自定义UI一般使用在PropertyGrid本身的属性编辑界面不能满足需求的时候,这时候需要把自己定义的编辑界面加入到PropertyGrid的属性编辑器里面。自定义UI基本有两种界面表现形式:下拉式(点击向下的小箭头下拉出一个编辑界面),和弹出式(出现三个小圆点的按钮,点击弹出编辑对话框)。
下面说说具体实现方法:
1. 实现自定义UI需要首先设计自定义的编辑控件,一般从UserControl或者Form集成。
2. 继承UITypeEditor类,并override方法GetEditStyle()和EditValue()。GetEditStyle()方法用于指定是下拉式还是弹出式,下拉式:return UITypeEditorEditStyle.DropDown; 弹出式:return UITypeEditorEditStyle.Modal;
EditValue()方法是实现自定义UI的关键,具体见以下代码:
public class CustomEditor : UITypeEditor
{
public CustomEditor ()
{
}
public override UITypeEditorEditStyle GetEditStyle(
ITypeDescriptorContext context)
{
return UITypeEditorEditStyle.Modal;
}
public override object EditValue(ITypeDescriptorContext context,
IServiceProvider provider, object value)
{
IWindowsFormsEditorService wfes = provider.GetService(
typeof(IWindowsFormsEditorService)) as
IWindowsFormsEditorService;
if (wfes != null)
{
// 在这里根据value值初始化自定义的控件,并把编辑以后的值赋值给value参数
}
return value;
}
}
3. 设置PropertyGrid相应属性的Editor特性
[Editor(typeof(CustomEditor ), typeof(System.Drawing.Design.UITypeEditor))]