0

我在属性上设置默认值时遇到问题,每次在其中修改表单时,Visual Studio 设计器都会“更新”该属性。

情况:

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 被修改时,它(重新)设置 my(已经预初始化):

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

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

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

2 回答 2

4

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

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

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

于 2010-02-10T18:26:59.247 回答
0

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

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

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

设计师不再触及FirstHour财产。

于 2010-02-11T10:44:07.313 回答