我添加的设计时组件属性在设计视图中具有空引用错误作为不可变值

时间:2017-01-12 23:04:28

标签: c# design-time

我正在尝试在设计时向组件添加新属性。该属性在设计视图中可见,但该值无法修改并显示为“对象引用未设置为对象的实例”。如果我需要实例化该属性,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);
        }
    }
}

1 个答案:

答案 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