1

如果我有一个类似以下的类,其代码无法更改,如何s1在运行时添加 EditorAttribute?

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

我尝试了这种方法,但它也添加了一个 EditorAttribute 编辑器s2,我不想要那个。

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

我怎样才能做到这一点?

4

1 回答 1

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派生版本,但这些实现起来非常简单

于 2012-03-11T22:18:19.560 回答