0

情況:我正在製作可摺疊面板。在我的業務情況,我需要有面板支持以下內容:如何防止使用默認構造函數的設計視圖?

  • A「方向」(即,將它停靠上,下,左,右)。這改變了它倒塌的方向和其他一些事情。

  • 「樣式」。這個產品有一些預定義的視覺樣式(定義背景顏色,漸變與否,文本顏色,懸停顏色等)。

下面是問題:某些樣式與某些方向不兼容。這裏是要求:

  • 需要有某種方式來防止/警告程序員,如果他/她所編碼的面板有不兼容的風格和方向。例如,讓面板拋出運行時異常(如果它們不兼容)將滿足此要求。

  • 不允許任何人在運行時動態更改風格或方向。如果需要,我可以允許它在InitializeComponent中「動態」更改,但不能在其他地方更改。

  • 該面板需要在設計視圖中可見。但不是必然能夠在設計視圖中拖放,技術上我不需要甚至在設計視圖中更改面板的屬性。儘管如果可能的話,我顯然想要其他的東西。

一個潛在的解決方案:讓構造函數接受兩個輸入:一個方向和一個樣式。這樣,這兩種變化都被視爲原子動作。如果它們不是同時改變,那麼改變方向/樣式然後改變另一個,面板將處於不一致的狀態。我想避免這種情況。

如何讓設計視圖不使用默認構造函數和/或什麼是更好的實踐來滿足需求?

小組僅僅是一個例子,一個用例詢問更廣泛的問題。我希望這篇文章回答關於讓Design View處理我的需求的最佳實踐的直接問題。如果Visual Studio支持在InitializeComponent中注入一個非默認構造函數,那麼我想知道如何(以及與此有關的任何注意事項)。如果有更好的做法滿足列出的要求,那麼我也想知道。

+0

您的要求與設計師的工作方式嚴重不符。你不能說服它使用非默認的構造函數,拖放支持是必不可少的,你的異常只會導致無法挽回的工作損失和一個真正令人生氣的程序員。是的,他可能不會犯同樣的錯誤兩次。 –

+0

@Hans,那麼你的建議是什麼?如果某些風格確實與某些方向不相容,那麼如何防止這些不兼容? –

+0

一個UITypeEditor。 –

回答

3

添加對ISupportInitialize界面的支持,設計人員可以使用界面來設置所有屬性並告訴你它何時被刷新。

2

部分答案:您不能讓Designer使用一些自定義構造函數。您需要將邏輯放在屬性設置器中。

在那裏拋出異常可能會導致設計器錯誤。如何重置字段爲一些適當的狀態呢?

您可能需要區分行爲,具體取決於您是否在DesignMode。如果你還沒有看過,請看DesignMode considerations