2017-01-12 1 views
0

Я пытаюсь добавить новое свойство к компоненту во время разработки. Свойство отображается в представлении проекта, но значение не может быть изменено и отображается как «Ссылка на объект, не установленная на экземпляр объекта». Если мне нужно создать экземпляр свойства, MSDN и google меня не удастся.Свойство компонента времени разработки, которое я добавляю, имеет нулевую опорную ошибку как неизменяемое значение в представлении дизайна

Куда я иду не так? Ниже приведена сокращенная версия кода, который я использую, что демонстрирует проблему.

[DesignerAttribute(typeof(designPropDesigner))] 
public class designProp : Component 
{ 
    public class designPropDesigner : ComponentDesigner 
    { 
     protected override void PreFilterProperties(IDictionary properties) 
     { 
      base.PreFilterProperties(properties); 

      var prop = TypeDescriptor.CreateProperty(typeof(designPropDesigner), "prop", typeof(string), new Attribute[] { DesignOnlyAttribute.Yes, new DefaultValueAttribute("") }); 
      properties.Add("prop", prop); 
     } 
    } 
} 

ответ

0

Конструктор класса должен реализовать свойство с соответствующим получить и установить функции и инициализировать должны быть перекрыты, чтобы включать начальное значение свойства, как показано в приведенном ниже коде.

[DesignerAttribute(typeof(designPropDesigner))] 
public class designProp : Component 
{ 

    public class designPropDesigner : ComponentDesigner 
    { 
     private string _prop; 

     public override void Initialize(IComponent component) 
     { 
      base.Initialize(component); 

      this.prop = "value"; 
     } 

     protected override void PreFilterProperties(IDictionary properties) 
     { 
      base.PreFilterProperties(properties); 

      var prop = TypeDescriptor.CreateProperty(typeof(designPropDesigner), "prop", typeof(string), new Attribute[] { DesignOnlyAttribute.Yes, new DefaultValueAttribute("") }); 
      properties.Add("prop", prop); 
     } 

     private string prop 
     { 
      get 
      { 
       return _prop; 
      } 
      set 
      { 
       _prop = value; 
      } 
     } 
    } 
} 

Дополнительную информацию можно получить по телефону this MSDN article.