代码之家  ›  专栏  ›  技术社区  ›  serhio

设计器重置属性值

  •  0
  • serhio  · 技术社区  · 16 年前

    我在设置属性的默认值时遇到问题,每次修改表单时,VisualStudio Designer都会“更新”该属性。

    情况:

    class MyHour { 
        MyHour() {} 
        MyHour(string h) {} 
    }
    
    class MyPanel { 
        _FirstHour = new FirstHour("13:00");
    
        [DefaultValue("13:00")]
        Hour FirstHour {get { return _FirstHour; } set{...}} 
    }
    

    当MyPanel位于VS设计器中且设计器已修改时,它(重新)设置my(已预初始化):

    MyHour myHour1 = new MyHour();
    ...
    myPanel1.FirstHour = myHour1;
    

    我希望它设置此属性(或只是不接触此属性):

    MyHour myHour1 = new MyHour("13:00");
    ...
    myPanel1.FirstHour = myHour1;
    
    2 回复  |  直到 16 年前
        1
  •  4
  •   Aaronaught    16 年前

    如果我正确理解了这个问题,您想知道为什么VS设计器没有将该属性初始化为您使用的设置 DefaultValue ?

    这个 DefaultValueAttribute 实际上不会导致默认值为 设置 ,它仅通知设计器对象通常使用的默认值,以便设计器知道对象是否已被修改(即是否需要序列化,并在属性网格中显示为粗体)。

    要实际设置默认值,需要在字段上使用初始值设定项,或在默认(无参数)构造函数中设置值。

        2
  •  0
  •   serhio    16 年前

    即使不是一个“完全满意”的解决方案,这也是一个:

    class MyPanel { 
        _FirstHour = new FirstHour("13:00");
    
        [DefaultValue("13:00"), 
        DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        Hour FirstHour {get { return _FirstHour; } set{...}} 
    }
    

    设计师不再触摸了 FirstHour 财产。