[英]How Do I Stop Visual Studio from Generating Setter Calls in my UserControl?
我已經為Winform應用程序創建了一些從UserControl繼承的控件。 根據需要,它們都具有無參數構造函數。 當我將它們放到我的主窗體上時,我在Visual Studio中在設計時遇到錯誤,它無法呈現窗體。
我發現的是,在我的控件實例化的表單的Designer.cs文件中,IDE在那里放置了一個調用我的一個setter的行。 BlockKey = 0
。 好吧,setter背后的代碼是調用其他代碼,很快就會拋出NullReferenceException,因為表單沒有運行; 其他代碼不准備在那時產生任何東西。
如果我手動刪除setter線,則錯誤消失。 但是關閉並重新打開或重新編譯,IDE會重新啟動該行。 我嘗試在UserControl中使用[DefaultValue(false)]
裝飾,認為這會抑制對setter的設計時調用,但事實並非如此。
如何擺脫Designer中的那一行? 或者我希望在setter中寫一些預防性代碼呢?
您應該在屬性上使用DesignerSerializationVisibilityAttribute
屬性並將其設置為Hidden
。
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public int BlockKey
{
get { return 0; }
set { /* Do something */ }
}
或者,如果您需要更具體的邏輯(即僅在某些條件下序列化),那么您必須創建一個返回bool的函數,並具有bool的特定名稱: bool ShouldSerialize*PropertyName*()
bool ShouldSerializeBlockKey()
{
return false;
}
(注意:我忘記了這個功能是否必須公開......)
您正在尋找的是DesignerSerializationVisibilityAttribute
。 這可以控制設計器是否將序列化特定屬性的默認值
如果將屬性指定為“ Hidden
則設計器不會為它們添加值
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.