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財產。