我正在尝试在设计时向组件添加新属性。该属性在设计视图中可见,但该值无法修改并显示为“对象引用未设置为对象的实例”。如果我需要实例化该属性,MSDN和谷歌会让我失望。
我哪里错了?这是我正在使用的代码的缩写版本,用于演示问题。
[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 :(得分:0)
设计器类需要使用适当的get和set函数实现该属性,并且应该重写initialize以包含属性的初始值,如下面的代码所示。
[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。