0

我在设置属性的默认值时遇到问题,每当窗体在其中被修改时都由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设计,并且设计修改它(重新)将我(已经预初始化):

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

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

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

回答

4

如果我正确地理解这个问题,你想知道w hy VS设计师是不是将这个属性初始化为你设置的DefaultValue

DefaultValueAttribute实际上并不导致该默认值是设置,它只是通知有关的缺省值对象通常是初始化,从而使设计师都知道它是否已被修改设计者(即无论它是否需要序列化,并应在属性网格中显示为粗体)。

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

+0

是的,我也从MSDN看到:“一个成员的默认值**通常是**它的初始值,一个可视化设计器**可以**使用默认值来重置成员的值代码生成器**可以* *还使用默认值来确定是否应该为成员生成代码。“最后,“一个DefaultValueAttribute不会导致一个成员用属性的值自动初始化,你必须在你的代码中设置初始值。”我设置了,但设计师重新设置了它。 “初始化程序”是什么意思? – serhio 2010-02-10 21:32:25

+0

@serhio:字段初始值设定项将一个字段声明为'private string hour =“13:00”'。最后一部分是初始化程序。如果你不能这样做(即你正在使用自动属性),那么你必须在构造函数中初始化它。 – Aaronaught 2010-02-11 03:02:10

+0

我已经在MyObj中进行了初始化。我会更新代码。我进行初始化,但设计师用新的(空的)“更新”我初始化的小时。 – serhio 2010-02-11 09:09:38

0

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

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

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

设计者不碰了FirstHour财产。