Domanda

Ho un componente Windows.Forms che ha un " mySize " proprietà che restituisce una struttura Size. La mia intenzione era di fare in modo che questa proprietà calcolasse automaticamente mySize restituito in base alla dimensione del componente, a meno che mySize non fosse impostato in modo esplicito, nel qual caso restituire il valore impostato di mySize. Sfortunatamente, ora che sto incorporando il componente in un modulo, il designer di Windows Form ha deciso di iniziare a generare e impostare in modo esplicito un valore per la proprietà mySize, che mi sta rovinando.

Quindi devo impostare un DefaultValue, in modo che il Designer scompaia e mi lasci in pace.

Ho letto le risposte relative a System.ComponentModel.DefaultValue, quindi so che devo impostare manualmente il valore della proprietà nel costruttore, ma le risposte e la documentazione che ho trovato riguardano solo l'impostazione di un DefaultValue di Falso, una costante.

Una struttura Size non è una costante e quindi il compilatore VB sta andando fuori di testa, dicendomi che non posso impostare una dimensione come valore predefinito per la proprietà della dimensione del tipo perché le dimensioni non sono costanti.

Questo mi fa male al cervello.

Probabilmente posso codificare il problema creando i metodi getMySize e setMySize invece di utilizzare una proprietà, ma vorrei sapere se esiste effettivamente un modo per impostare la proprietà predefinita per una dimensione.

NB: Non sto usando mySize come una sorta di tentativo squilibrato di sovrascrivere la proprietà Size (che ha un DefaultValue di 150x150, quindi QUALCOSA sembra essere in grado di impostare DefaultValues ??per le dimensioni); mySize è solo un valore di Dimensione richiesto dalla Classe.

È stato utile?

Soluzione

Invece di applicare l'attributo DefaultValue, scrivi i seguenti due metodi:

bool ShouldSerializemySize() { ... }
void ResetmySize() { ... }

In ShouldSerializemySize, restituisce true se il valore deve essere serializzato in codice. In ResetmySize, reimposta la proprietà sul valore predefinito.

Il progettista del componente prenderà automaticamente questi metodi tramite reflection.

Maggiori informazioni qui: http://msdn.microsoft.com/en-us/ biblioteca / 53b8022e (VS.71) aspx

Altri suggerimenti

Ho notato che in realtà è stato fornito un esempio specifico per l'impostazione di defaultValue di tipo Size nella sezione Contenuto della community di Pagina MSDN di DefaultValue , che suggerisce l'utilizzo del costruttore DefaultValue descritto in questa pagina .

Sfortunatamente, mentre l'esempio fornito è corretto, in quanto funziona, mi sembra che la documentazione MSDN non induca naturalmente nessuno a questa risposta.

Ho intenzione di impostare la risposta di albahari come risposta a questa domanda (perché la sua risposta almeno ha un qualche tipo di senso) e lascio qui questo esempio per completezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top