2010-03-25 19 views

risposta

17

MSDN dice it all:

Specifica se una proprietà o di un evento devono essere visualizzati in una finestra delle proprietà.

Per esempio, se si sta creando un controllo utente, si potrebbe desiderare per decorare i non-UI legate proprietà con [Browsable(false)] in modo che essi non saranno disponibili attraverso una finestra "Proprietà".

Inoltre, controlla quali proprietà di un oggetto possono essere visualizzate in un PropertyGrid.

Per quanto riguarda il motivo per cui siamo in grado di passare true esplicitamente, credo che questo sia dovuto al BrowsableAttributes proprietà di un PropertyGrid. È possibile impostarlo per contenere BrowsableAttribute.No, in modo che la griglia delle proprietà visualizzerà tutti i membri non sfogliabili.

+1

Questo non risponde alla domanda. – SLaks

+1

@SLaks: risponde alla domanda originale, ma non la tua reinterpretazione. –

+0

Sono abbastanza sicuro che la mia interpretazione sia corretta. (Altrimenti, avrebbe detto 'true') – SLaks

22

Per quanto ne so, mai.

EDIT

mi sbagliavo.
E 'necessario se si vuole fare una proprietà che ha [Browsable(false)] nella classe di base (ad esempio UserControl.Text) sfogliabile.

+0

Perché è stato downvoted? – SLaks

+1

Buone spiegazioni su dove sarebbe stato specificamente utilizzato. – itsmatt

-1

BrowsableAttribute Class (System.ComponentModel)

Gli stati di documentazione:

Un visual designer mostra tipicamente nella finestra Proprietà quei membri che o non hanno alcun sfogliabile attributo o sono contrassegnate con il parametro sfogliabile del BrowsableAttribute costruttore impostato su true.

[Browsable] anche impostato su true.

... quindi tecnicamente, non hai mai bisogno di [Browsable(true)] a meno che tu non voglia essere molto esplicito.

+1

'mai .. eccetto ..' non è corretto/completo, principalmente sovrascrivendo la classe base che ha un valore 'false'. – EricG

0

Un visual designer di solito visualizza nella finestra Proprietà quei membri che non hanno alcun attributo sfogliabile o sono contrassegnati con il parametro sfogliabile del costruttore BrowsableAttribute impostato su true. Questi membri possono essere modificati in fase di progettazione. I membri contrassegnati con il parametro sfogliabile del costruttore BrowsableAttribute impostato su false non sono appropriati per la modifica in fase di progettazione e pertanto non vengono visualizzati in un visual designer. L'impostazione predefinita è true.

quindi, la risposta è che non si è mai a a, come è fatto di default.

+0

Questo non risponde alla domanda. – SLaks

+0

lì, ho aggiunto una risposta. –

+1

Questo è sbagliato; ci sono casi in cui devi farlo. – SLaks

0

Secondo the documentation si desidera che sia vero quando deve essere visualizzato nella finestra delle proprietà in VS. Fondamentalmente si applica alle classi utilizzate nel designer.

+0

È 'true' per impostazione predefinita. Devi solo specificare l'attributo quando lo si imposta su 'false'. – SLaks

+0

sì, ma le proprietà sono di default selezionabili. Penso che l'OP abbia chiesto se ci sono casi in cui una proprietà ha bisogno di questo set su * true * per apparire. –

+0

@SLaks e @ Isak Salva buoni punti. Immagino che un valore di attributo di true abbia senso quando si sostituisce una proprietà in una classe genitore che l'ha impostata su false esplicitamente. –

3

Probabilmente quando si vuole fare dannatamente sicuro che nessuno lo cambia: P

// I want to see this, dont change it to false or I'll hunt you down... 
[Browsable(true)] 
public int MyProperty { 
    get { 
     // Insert code here. 
     return 0; 
    } 
    set { 
     // Insert code here. 
    } 
} 
+1

Non è necessario l'attributo; il commento da solo dovrebbe essere abbastanza buono. – SLaks

+0

haha, è vero, ma il browsable dice loro esattamente di quale attributo stai parlando – SwDevMan81

+0

Puoi cambiare il commento a '// NON aggiungere [Navigabile (falso)]' – SLaks

0

un'occasione quando questo attributo diventa importante è durante lo sviluppo WebPart per SharePoint. In questo scenario si forniscono meta informazioni per Sharepoint per determinare se la propria webpart dovrebbe essere visualizzabile per la selezione ecc. Ci sono altri attributi simili come Category e FriendlyName ecc. Che sono anche presi in considerazione.

Vedere i seguenti esempi:

Creating a web part with custom properties

E un altro con le immagini decenti l'editor SharePoint webpart che riflette i tuoi attributi:

Making Sharepoint WebParts interact

1

I tipi e gli attributi in ComponentModel sono non specificamente legato a un particolare designer. Anche se non conosco uno scenario specifico che dovresti "optare" per essere "designer-browsable", suppongo sia ipotizzabile che tu possa avere qualche designer di componenti che si possa considerare sfogliabile (falso).

Suppongo che si possa anche eseguire l'override di una proprietà virtuale specificata come sfogliabile (false) e applicare browsable (true) nel membro sottoposto a override.

+0

Il progettista Xamarin iOS ha come impostazione predefinita le proprietà non progettabili. È necessario specificare [Navigabile (vero)] affinché vengano visualizzati nel pannello delle proprietà. https://developer.xamarin.com/guides/ios/user_interface/designer/ios_designable_controls_overview/#Custom_Properties – chkn

3

Il problema è che le cose sono sfogliabili per impostazione predefinita. L'unico scenario a cui posso pensare è quello di ignorare un membro e modificando la visibilità ... qui F è visibile solo a causa dello [Browsable(true)] nella classe derivata - senza di esso, lo non è visibile.

using System.ComponentModel; 
using System; 
using System.Windows.Forms; 
static class Program 
{ 
    [STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 
     Application.Run(new Form { Controls = {new PropertyGrid { 
      Dock = DockStyle.Fill, SelectedObject = new Bar() 
     }}}); 
    } 
} 
public class Foo 
{ 
    public virtual string A { get; set; } 
    public virtual string B { get; set; } 
    public virtual string C { get; set; } 
    [Browsable(false)] public virtual string D { get; set; } 
    [Browsable(false)] public virtual string E { get; set; } 
    [Browsable(false)] public virtual string F { get; set; } 
    [Browsable(true)] public virtual string G { get; set; } 
    [Browsable(true)] public virtual string H { get; set; } 
    [Browsable(true)] public virtual string I { get; set; } 
} 
public class Bar : Foo 
{ 
    public override string A { get { return base.A; } set { base.A = value; } } 
    [Browsable(false)] public override string B { get { return base.B; } set { base.B = value; } } 
    [Browsable(true)] public override string C { get { return base.C; } set { base.C = value; } } 
    public override string D { get { return base.D; } set { base.D = value; } } 
    [Browsable(false)] public override string E { get { return base.E; } set { base.E = value; } } 
    [Browsable(true)] public override string F { get { return base.F; } set { base.F = value; } } 
    public override string G { get { return base.G; } set { base.G = value; } } 
    [Browsable(false)] public override string H { get { return base.H; } set { base.H = value; } } 
    [Browsable(true)] public override string I { get { return base.I; } set { base.I = value; } } 
} 
Problemi correlati