2017-01-12 6 views
0

J'essaie d'ajouter une nouvelle propriété à un composant au moment du design. La propriété est visible en mode Création, mais la valeur ne peut pas être modifiée et s'affiche en tant que "Référence d'objet non définie sur une instance d'un objet". Si j'ai besoin d'instancier la propriété, MSDN et google m'échouent.La propriété de composant au moment du design que j'ajoute contient une erreur de référence null en tant que valeur immuable dans la vue de conception

Où est-ce que je me trompe? Voici une version abrégée du code que j'utilise qui démontre le problème.

[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); 
     } 
    } 
} 

Répondre

0

La classe concepteur doit implémenter la propriété avec des fonctions get et set appropriées, et initialiser devrait être surchargée d'inclure une valeur initiale de la propriété, comme le montre le code ci-dessous.

[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; 
      } 
     } 
    } 
} 

Pour plus d'informations, vérifiez this MSDN article.