¿Cuándo necesitamos usar [Browsable(true)]
?¿Cuándo necesitamos usar [Browsable (true)]?
EDITAR (por SLaks): Está pidiendo (supongo) por las que uno necesita para pasar true
como parámetro, dado que es ya true
por defecto.
¿Cuándo necesitamos usar [Browsable(true)]
?¿Cuándo necesitamos usar [Browsable (true)]?
EDITAR (por SLaks): Está pidiendo (supongo) por las que uno necesita para pasar true
como parámetro, dado que es ya true
por defecto.
MSDN dice it all:
Especifica si una propiedad o evento debe mostrarse en una ventana de Propiedades.
Por ejemplo, si va a crear un control de usuario, es posible que desee para decorar propiedades no relacionadas con la interfaz de usuario, con [Browsable(false)]
para que no estarán disponibles a través de una ventana "Propiedades".
Además, controla qué propiedades de un objeto se pueden ver en un PropertyGrid
.
En cuanto a por qué podemos pasar true
explícitamente, creo que esto se debe a BrowsableAttributes
propiedad de un PropertyGrid
. Puede configurarlo para que contenga BrowsableAttribute.No
, de modo que la cuadrícula de propiedades muestre todos los miembros no navegables.
Por lo que sé, nunca.
que estaba equivocado.
Es necesario si desea hacer una propiedad que tenga [Browsable(false)]
en su clase base (como UserControl.Text
) navegable.
BrowsableAttribute Class (System.ComponentModel)
La documentación:
Un diseñador visual suele mostrar en la ventana Propiedades de los miembros que o bien no tienen atributo navegables o están marcados con el parámetro navegable del BrowsableAttribute constructor establecido en verdadero.
[Browsable]
también se predetermina a true.
... así que técnicamente, nunca necesita [Browsable(true)]
a menos que desee ser muy explícito.
'nunca ... excepto ..' no es correcto/completo, principalmente la clase base primordial que tiene un valor 'falso'. – EricG
Un diseñador visual normalmente muestra en la ventana Propiedades aquellos miembros que no tienen atributos navegables o están marcados con el parámetro navegable del constructor BrowsableAttribute establecido en verdadero. Estos miembros se pueden modificar en el momento del diseño. Los miembros marcados con el parámetro navegable del constructor BrowsableAttribute establecido en falso no son apropiados para la edición en tiempo de diseño y, por lo tanto, no se muestran en un diseñador visual. El valor predeterminado es true.
, la respuesta es que nunca tiene, ya que está hecho de forma predeterminada.
De acuerdo con the documentation, quiere que sea verdadero cuando se debe mostrar en la ventana de propiedades en VS. Básicamente se aplica a las clases que se utilizan en el diseñador.
Es 'verdadero' por defecto. Solo necesita especificar el atributo al configurarlo en 'false'. – SLaks
sí, pero las propiedades se pueden examinar de forma predeterminada. Creo que el OP preguntó si hay casos en que una propiedad necesita este conjunto a * verdadero * para aparecer. –
@SLaks y @Isak Guarde los puntos buenos. Supongo que un valor de atributo de verdadero tiene sentido cuando se anula una propiedad en una clase principal que lo ha establecido en falso explícitamente. –
Probablemente cuando se quiere hacer totalmente seguro de que nadie 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.
}
}
No necesita el atributo; el comentario solo debería ser lo suficientemente bueno. – SLaks
jaja, eso es cierto, pero el navegador les dice exactamente de qué atributo está hablando – SwDevMan81
Puede cambiar el comentario a '// NO agregar [Browsable (falso)]' – SLaks
una ocasión cuando este atributo se convierte en importante es durante el desarrollo WebPart para SharePoint. En este escenario, está proporcionando metainformación para Sharepoint para determinar si su parte web debe poder verse, etc. Hay otros atributos similares, como Category y FriendlyName, que también se tienen en cuenta.
Véanse los siguientes ejemplos:
Creating a web part with custom properties
y otro con imágenes dignas del editor SharePoint parte web que refleja sus atributos:
Los tipos y atributos en ComponentModel son no específicamente vinculado a ningún diseñador en particular. Aunque no conozco ningún escenario específico en el que deba "optar por" ser navegable por el diseñador, supongo que es concebible que pueda tener algún diseñador de componentes que suponga navegable (falso).
Supongo que también podría anular una propiedad virtual que especificó browsable (false) y aplicar browsable (true) en el miembro anulado.
El diseñador de iOS de Xamarin se predetermina a las propiedades que no son designables. Debe especificar [Browsable (true)] para que aparezcan en el panel de propiedades. https://developer.xamarin.com/guides/ios/user_interface/designer/ios_designable_controls_overview/#Custom_Properties – chkn
El problema es que las cosas se pueden consultar de forma predeterminada. El único escenario en el que puedo pensar que importaría es anular un miembro y cambiar la capacidad de navegación ... aquí F
es visible solo por [Browsable(true)]
en la clase derivada - sin él, no está visible.
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; } }
}
Cuando necesite la propiedad para que aparezca en la ventana Propiedades. –