Добавление EditorAttribute во время выполнения (динамически) к специальному свойству объекта

Если у меня есть класс, подобный следующему, код которого я не могу изменить, как я могу добавить 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 ответ

Решение

Вы можете попробовать реализовать свой собственный дескриптор типа для класса с помощью 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());

Возможно, вам придется создать свои собственные производные версии PropertyDescriptor и PropertyDescriptorCollection, но они довольно просты в реализации

Другие вопросы по тегам