2017-01-12 2 views
0

Ich versuche, eine neue Eigenschaft zu einer Komponente zu Entwurfszeit hinzuzufügen. Die Eigenschaft ist in der Entwurfsansicht sichtbar, aber der Wert kann nicht geändert werden und wird als "Objektreferenz nicht auf eine Instanz eines Objekts festgelegt" angezeigt. Wenn ich die Eigenschaft instanziieren muss, versagen MSDN und Google mich.Die Entwurfszeit-Komponenteneigenschaft, die ich hinzufüge, hat einen Null-Referenzfehler als unveränderlichen Wert in Entwurfsansicht

Wohin gehe ich falsch? Hier ist eine abgekürzte Version des Codes, den ich verwende, der das Problem demonstriert.

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

Antwort

0

Die Designerklasse muss die Eigenschaft mit entsprechenden Get- und Set-Funktionen implementieren, und initialisieren sollte einen Anfangswert für die Eigenschaft umfasst außer Kraft gesetzt werden, wie in dem unten stehenden Code demonstriert.

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

Für weitere Informationen, überprüfen this MSDN article.

Verwandte Themen