Designer重置属性值

时间:2010-02-10 18:20:21

标签: .net .net-2.0 windows-forms-designer visual-studio-designer

我在设置属性的默认值时遇到问题,每次在其中修改表单时,Visual Studio 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 Designer中并且Designer被修改时(重新)设置我的(已经预先初始化):

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

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

MyHour myHour1 = new MyHour("13:00");
...
myPanel1.FirstHour = myHour1;

2 个答案:

答案 0 :(得分:4)

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

DefaultValueAttribute实际上并不会导致默认值为 set ,它只是告知设计者有关通常初始化对象的默认值,以便设计人员知道是否或者它是否已经被修改(即它是否需要序列化并且应该在属性网格中显示为粗体。)

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

答案 1 :(得分:0)

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

class MyPanel { 
    _FirstHour = new FirstHour("13:00");

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

Designer不再触及FirstHour属性。