在运行时(动态)将EditorAttribute添加到Object的特殊属性

时间:2012-02-29 16:24:54

标签: c# propertygrid addattribute

如果我有类似以下类的代码我无法更改,那么如何在运行时将EditorAttribute添加到s1

class TestClass 
{ 
    public String s1 {get;set;} 
    public String s2 {get;set;} 
} 

我尝试了这种方法,但它也将一个EditorAttribute编辑器添加到s2,我不希望这样。

TypeDescriptor.AddAttributes(
     typeof(String),
     new EditorAttribute ( 
          typeof(MyUITypeEditor),
          typeof(UITypeEditor)));

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用CustomTypeDescriptor为类实现自己的类型描述符,并覆盖GetProperties方法以返回一组自定义属性描述符,这将使您有机会添加任何自定义属性的任何属性你希望。

一旦有了这个自定义类型描述符,就可以将该类的实例(可以将TestClass类的实例包装)绑定到PropertyGrid控件。

如下所示:

public class TestClassTypeDescriptor : ICustomTypeDescriptor
{
   private TestClass mInst;

   public TestClassTypeDescriptor(TestClass inst)
   {
     mInst = inst;
   }

   //Implement ICustomTypeDescriptor
}


PropGridControl.SelectedObject = new TestClassTypeDescriptor(new TestClass());

您可能需要创建自己的PropertyDescriptorPropertyDescriptorCollection派生版本,但这些版本的实施非常简单