2010-02-10 47 views
0

什麼是最好的方式來避免(或控制)設計師在.NET中的沉重的自定義屬性的初始化?有時候,最初設置某個屬性時最重要的是不要在初始設置時執行該設置。自定義屬性默認值和.NET設計器

在下面的想象的例子中,我想實現像UpdateSetting這樣的屬性的靈活性,但不是每次啓動應用程序時都將數據庫設置爲零的不便之處。我能想到的是另一個解鎖國旗的財產。

public class A : UserControl 
{ 
    public int UpdateSetting 
    { 
    // Write to database or some such thing 
    } 

... 

    public void InitializeComponent() 
    { 
    A a = new A(); 
    a.UpdateSetting = 0; // Causes database write 
    } 
} 

回答

1

假設你控制組件(A類),申請DesignerSerializationVisibilityAttribute到昂貴的財產,與隱藏選項說「不產生該物業的二傳手」:

public class A : UserControl 
{ 
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
    public int UpdateSetting 
    { 
    // Write to database or some such thing 
    } 
} 

(編輯:在重新閱讀時,我不確定是要防止設計者初始化,還是使其成爲可選項,或者允許通過設計人員完成初始化,但推遲初始化的實際執行,僅解決這些情況中的第一個)

+0

是的,我正在拍攝可選,但回想起來,這可能也適用。 – Nicholas 2010-02-10 04:49:50

1
[Default(0)] 
public int UpdateSetting 
{ 
    get { /*...*/} 
    set {/* Write to database or some such thing... */ } 
} 

這將使它顯示出設計者最初0(並顯示在大膽,如果你改變它後,把它設回0),而在每一個代碼實際進行任何設置。

+2

http://stackoverflow.com/questions/2290746/what-namespace-is-the-default-attribute-for-properties-on-usercontr ols/2290768#2290768 我相信你有錯誤的屬性名稱。 – 2010-02-18 17:38:51

相關問題