2009-05-04 15 views
13

Ho un controllo utente con alcune proprietà booleane. Mi piacerebbe che fossero impostati su true di default se non fossero impostati esplicitamente nella pagina .aspx, o almeno li forzassero per essere dichiarati se non c'è modo di impostare un valore predefinito. So che c'è un modo per farlo perché molti controlli hanno richiesto proprietà che interrompono la tua app quando tenti di eseguirla e non vengono dichiarate.UserControl Valore predefinito nella proprietà

Come posso fare?

Esempio:

<je:myControl runat="server" id="myControl" showBox="False"> 

I desidera che il sistema sia rompere o impostare il valore predefinito su "true" se ShowBox è lasciato fuori da questa dichiarazione.

Grazie!

risposta

20

Definire le proprietà con i loro valori di default del genere:

private bool _ShowBox = false; 
public bool ShowBox 
{ 
    set { _ShowBox = value; } 
} 

o nel costruttore del controllo, impostare i valori predefiniti:

public MyControl() 
{ 
    _ShowBox = false; 
} 

o eccezione tiro se non è assegnato:

private bool _ShowBox = false; 
public bool ShowBox 
{ 
    set { _ShowBox = value; } 
    get { return _ShowBox; } 
} 
+0

grazie! questo è perfetto – Jason

+0

'if (_ShowBox == null) {' può essere vero perché non sarà possibile impostare un valore bool su null. – Peter

+0

Cosa? il controllo di bool con null restituirà sempre false !!!! – Yuki

2

Basta impostare il valore di default desiderato, quando si dichiara una variabile:

class myControl 
{ 
    private bool _showBox = true; 

    [PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)] 
    public bool showBox 
    { 
     get { return _showBox; } 
     set { _showBox = value; } 
    } 
} 

opzionale è possibile aggiungere il DefaultValueAttribute per il progettista.

24

So che sono in ritardo ma volevo solo menzionare che

[DefaultValue(false)] 

NON imposterà l'attributo su falso. Vedi: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx. Dice:

"Un DefaultValueAttribute non causerà l'inizializzazione automatica di un membro con il valore dell'attributo." Devi impostare il valore iniziale nel tuo codice. "

Questo attributo serve solo a indicare in Visual Studio Designer ciò che si considera come valore predefinito. Se qualcuno che utilizza il tuo controllo modifica questo valore, verrà visualizzato in grassetto per segnalare che questo valore non è predefinito.

2

ReSharper consiglia di utilizzare un auto-di proprietà, e impostando il valore di default nel costruttore, in questo modo:

public class MyControl 
{ 
    public MyControl() 
    { 
    ShowBox = true; 
    } 

    public bool ShowBox { get; set; } 
} 
Problemi correlati