Quello che ha funzionato per me per le proprietà che non possono ignorare sta utilizzando l'operatore new
. Ad esempio, la proprietà MultiSelect
su un controllo ListView
. Voglio MultiSelect
di default su false
, ma voglio ancora poterlo modificare.
Se ho appena impostato a false
nel costruttore, o in InitializeComponent
, il problema (credo) è che il valore di default è ancora true
, quindi se ho impostato il valore a true
nella finestra di progettazione, gli avvisi di design che true
è l'impostazione predefinita e pertanto non imposta la proprietà affatto piuttosto che impostarla in modo esplicito su ciò che pensa sia già l'impostazione predefinita. Ma poi il valore finisce per essere false
, perché è ciò che è impostato nel costruttore.
Per ovviare a questo problema ho usato il seguente codice:
/// <summary>Custom ListView.</summary>
public sealed partial class DetailsListView : ListView
{
...
[DefaultValue(false)]
public new bool MultiSelect {
get { return base.MultiSelect; }
set { base.MultiSelect = value; }
}
Questo permette il controllo di avere ancora un MultiSelect
proprietà funzionante che il default è false
piuttosto che true
, e la proprietà può ancora essere attivati sul nuovo controllo.
EDIT: Ho riscontrato un problema relativo all'utilizzo di moduli astratti. Ho utilizzato classi di moduli astratti, con un'implementazione concreta a cui sono passato quando ho bisogno di utilizzare il designer. Ho scoperto che quando ho cambiato la classe che stavo ereditando da quella proprietà sul mio controllo personalizzato si resettava ai vecchi valori predefiniti. Mi sembra di aver corretto questo comportamento impostando le proprietà sui valori predefiniti nel costruttore del controllo personalizzato.
fonte
2013-07-01 02:42:21
Puoi dare un esempio di come applicarlo per basare le proprietà della classe? –
Ci scusiamo - è '[DefaultValue (someValue)]'. Ecco un link al MSDN su di esso con esempio: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute%28v=vs.90%29.aspx – Bridge
Penso che l'attributo DefaultValue sia ciò che bisogno. L'IDE di Visual Studio inserirà il valore predefinito specificato nell'attributo nel file Designer. Se l'utente modificherà il valore predefinito con qualche altro valore, Visual Studio IDE aggiornerà il file Designer con un nuovo valore. Ciò impedirà il ricaricamento del valore precedente quando il controllo verrà riaperto poiché il valore predefinito è già stato sovrascritto. – jags