2011-10-16 49 views
9

我使用下面的屬性有一個公共性質的用戶控件:使Visual Studio設計忽略的公共屬性

[Browsable(false)] 
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 

我試圖刪除所有者的形式,重新創建在Visual Studio 2010中新形式,並將此UserControl添加到窗體。它不斷添加一行像在設計文件中的以下:

this.vMyUserControl.MyProperty = ((MyNamespace.MyClass)(resources.GetObject("vMyUserControl.MyProperty"))); 

這崩潰我的應用程序,因爲這個屬性的目的不是要通過序列化創建。

回答

1

我沒能找到真正的解決辦法,但有解決方法,而不是...

我不得不進入Form.resx文件並找到數據/值它是反序列化到我的公共財產的密鑰對。我手動刪除了XML對內容,然後我就可以運行該應用程序。

這使我的應用程序可以正常構建和運行。我嘗試過的其他一切(包括刪除UserControl的容器表單並重復重新創建)都無效。

5

使用[DesignerSerializationVisibilityAttribute (Visibility = Hidden)]

MSDN Article

+1

對不起,我沒看到你已經使用了... –

2

嘗試使用帶有屬性的存取方法的私人領域與沿[字段:非序列化]屬性:

[field: NonSerialized] 
private MyType _MyProperty; 

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
public MyType MyProperty 
{ 
    get 
    { 
     return _MyProperty; 
    } 
    set 
    { 
     _MyProperty = value; 
    } 
} 
11

製作只能在設計時讀會阻止它被序列化到RESX文件的屬性。奇怪的是,如果MyType碰巧是一個集合,只讀設計將被設計者忽略,並且即使該屬性沒有寫入到resx中,您仍然可以在設計時設置該屬性,因此最好使該屬性不可瀏覽。

[ReadOnly(true)] 
[Browsable(false)] 
public MyType MyProperty 
{ 
    get { return _MyProperty; } 
    set { _MyProperty = value; } 
} 
+1

我只是想分享一個同事推薦該解決方案觀看WinForm設計時會導致Visual Studio崩潰。使用這些屬性設置所有自定義公共屬性,這將防止設計者導致VS崩潰。 – TheLegendaryCopyCoder

+0

我希望這個屬性存在於緊湊框架中。 :( – reirab

+0

我不得不在VS 2013(VB)中使用完全限定的名稱: Azura