Добавление EditorAttribute во время выполнения (динамически) к специальному свойству объекта - PullRequest
1 голос
/ 29 февраля 2012

Если у меня есть класс, подобный следующему, код которого я не могу изменить, как я могу добавить EditorAttribute к s1 во время выполнения?

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

Я пробовал этот метод, но он добавляетEditor. Редактор атрибута тоже для s2, и я не хочу этого.

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

Как я могу это сделать?

1 Ответ

0 голосов
/ 12 марта 2012

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

...