簡體   English   中英

如何阻止Visual Studio在UserControl中生成Setter調用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM