2011-10-16 10 views
9

Mam UserControl z własności publicznej, stosując następujące atrybuty:Making projektant Visual Studio ignorować własność publiczną

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

Próbowałem usuwając postać właściciela, ponownie tworząc nową formę w Visual Studio 2010 i dodanie tej UserControl do formularza. Utrzymuje dodanie linii jak poniżej w pliku autora:

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

ten zawiesza mojej aplikacji, ponieważ właściwość ta nie ma na celu być tworzone przez serializacji.

Odpowiedz

1

nie udało mi się znaleźć prawdziwe rozwiązanie, ale obejście zamiast ...

musiałem iść do pliku Form.resx i zlokalizować dane/wartości klucz pary, który deserializował się w mojej publicznej własności. Ręcznie usunąłem zawartość pary XML, a następnie mogłem uruchomić aplikację.

Pozwoliło to mojej aplikacji na tworzenie i uruchamianie bez błędów. Wszystko inne, co próbowałem (w tym usuwanie formularza kontenera do mojego UserControl i ponowne jego wielokrotne tworzenie) nie działało.

5

Zastosowanie [DesignerSerializationVisibilityAttribute (Visibility = Hidden)]

MSDN Article

+1

Niestety, nie widzę, że masz już wykorzystywane, że ... –

2

Spróbuj użyć prywatną pole z metod dostępowych na własność wraz z jego [field: NonSerialized] atrybut:

[field: NonSerialized] 
private MyType _MyProperty; 

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

Making właściwość tylko do odczytu w czasie projektowania uniemożliwi to są szeregowane do pliku RESX. O dziwo, jeśli MyType ma być kolekcją, tylko do odczytu jest ignorowane przez projektanta i nadal możesz ustawić właściwość w czasie projektowania, nawet jeśli właściwość nie jest wypisana na resx, więc najlepiej jest uczynić tę właściwość nieobsługiwaną.

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

Chciałbym tylko podzielić się że kolega polecił to rozwiązanie podczas przeglądania projektanta WinForm Visual Studio powoduje awarię. Ustaw wszystkie niestandardowe właściwości publiczne za pomocą tych atrybutów, co uniemożliwi projektantowi spowodowanie awarii usługi VS. – TheLegendaryCopyCoder

+0

Chciałbym, aby ten atrybut istniał w zwartej strukturze. :( – reirab

+0

Musiałem użyć w pełni kwalifikowanej nazwy: w VS 2013 (VB) – Azura

Powiązane problemy