2011-10-16 14 views
9

Ho un UserControl con una proprietà pubblica utilizzando i seguenti attributi:Rendere il progettazione di Visual Studio ignorare una proprietà pubblica

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

Ho provato a cancellare la forma proprietaria, ri-creando una forma fresca in Visual Studio 2010 e aggiungendo questo UserControl al modulo. Si continua ad aggiungere una riga come la seguente nel file Designer:

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

Questo blocca la mia domanda perché questa proprietà non è progettato per essere creato da serializzazione.

risposta

1

non sono riuscito a trovare una vera soluzione, ma una soluzione alternativa, invece ...

ho dovuto andare nel file Form.resx e individuare i dati/valore la coppia di chiavi che si stava deserializzando nella mia proprietà pubblica. Ho eliminato manualmente il contenuto della coppia XML e sono riuscito a eseguire l'applicazione.

Ciò ha consentito alla mia applicazione di creare ed eseguire senza errori. Tutto il resto che ho provato (incluso eliminare il modulo contenitore per il mio UserControl e ricrearlo ripetutamente) non ha funzionato.

5

Usa [DesignerSerializationVisibilityAttribute (Visibility = Hidden)]

MSDN Article

+1

Spiacente, non ho visto che hai già provato che ... –

2

provare a utilizzare un campo privato con metodi di accesso della proprietà insieme al [field: NonSerialized] attributo:

[field: NonSerialized] 
private MyType _MyProperty; 

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

rendendo la proprietà di sola lettura in fase di progettazione gli impedirà di essere serializzato nel file resx. Stranamente, se MyType sembra essere una raccolta, la sola lettura viene ignorata dal progettista e si può ancora impostare la proprietà in fase di progettazione anche se la proprietà non è scritta nella resx, quindi è meglio rendere la proprietà non sfogliabile.

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

Vorrei solo condividere che un collega consigliato questa soluzione per quando si visualizza un progettista WinForm provoca Visual Studio crash. Imposta tutte le proprietà pubbliche personalizzate con questi attributi che impediranno al progettista di provocare l'arresto anomalo di VS. – TheLegendaryCopyCoder

+0

Vorrei che questo attributo esistesse nel framework compatto. :( – reirab

+0

Ho dovuto usare il nome completo: in VS 2013 (VB) – Azura

Problemi correlati