2010-08-11 37 views
1

如果我們的UserControl需要某些屬性被設置爲有用,那麼確保它們被設置的最佳方法是什麼?即使只是向自己和/或親密的同事留言。確保UserControl上的屬性被設置的好方法?

我們已經嘗試過使用Initialize方法,但這已經讓我們失望了,因爲我們忘記在一個實例中更新Initialize,稍微改變了設計。

另一個想法是使用一個合理的默認值,這樣如果我們忘記設置它,那麼至少有一些有用的東西。但在這種情況下,沒有有用的默認值。我真的很想要一個強烈的注意到自我來提醒我這裏有什麼需要設置每次創建控件的實例。

+0

看起來像對我很好的答案,沒有跟進你。你還需要別的嗎? – 2010-08-18 21:12:11

+0

@Hans我做了一個不同的方式,試圖決定是否將我的方式設置爲正確的答案並接受它,或者我的方式是否太粗糙,在這種情況下,我會接受其中一個。請注意我很久以前就提出了兩個答案 – hawbsl 2010-08-25 20:07:46

回答

2

沒有什麼尖叫必須像異常一樣實施。如果有具有至關重要的屬性,我永遠只是確保我知道這件事情,當涉及到運行代碼:

public object ImportantProperty 
{ 
    get 
    { 
     if (!this.DesignMode && _superImportantProperty == null) 
     { 
      throw new Exception("The property ImportantProperty must be set."); 
     } 
    } 
} 

當然,這可能是一個有點偏激,如果你能逃脫默認適當的價值。在可能的情況下,始終選擇適合災難性行動的優雅行動方案。

3

沒有什麼可以在設計師級強制執行的,沒有「我完成設計」的觸發器。但可以肯定在運行時,只是在儘可能早的時刻拋出一個異常:

protected override void OnCreateControl(EventArgs e) { 
    if (!DesignMode && !mumbleAssigned) 
     throw new InvalidOperationException("Oops, Mumble property wasn't set"); 
    base.OnCreateControl(e); 
} 

你可以使它更微妙的,如果你執行的OnPaint()方法。並簡單地e.Graphics.DrawText提醒。在屬性設置器中調用Invalidate()。這在設計時適用。