Когда нам нужно использовать [Browsable(true)]
?
EDIT (по SLaks): он спрашивает (я полагаю), почему нужно было бы передать true
в качестве параметра, учитывая, что он уже true
по умолчанию.
Когда нам нужно использовать [Browsable(true)]
?
EDIT (по SLaks): он спрашивает (я полагаю), почему нужно было бы передать true
в качестве параметра, учитывая, что он уже true
по умолчанию.
MSDN говорит все это:
Указывает, должно ли отображаться свойство или событие в окне свойств.
Например, если вы создаете пользовательский элемент управления, вы можете украсить свойства, не связанные с UI, с помощью [Browsable(false)]
, чтобы они не были доступны через окно "Свойства".
Кроме того, он контролирует, какие свойства объекта можно увидеть в PropertyGrid
.
Что касается того, почему мы можем явно передать true
, я полагаю, что это связано с BrowsableAttributes
свойство a PropertyGrid
. Вы можете установить его в BrowsableAttribute.No
, чтобы в сетке свойств отображались все не просматриваемые элементы.
Насколько я знаю, никогда.
Я ошибся.
Это необходимо, если вы хотите создать свойство, которое имеет [Browsable(false)]
в базовом классе (например, UserControl.Text
).
Возможно, если вы хотите, чтобы никто не изменил его: 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.
}
}
Проблема заключается в том, что по умолчанию данные доступны для просмотра. Единственный сценарий, который я могу думать, когда это имеет значение, - это переопределение члена и изменение возможности просмотра... здесь F
отображается только из-за [Browsable(true)]
в производном классе - без него он не отображается.
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; } }
}
Типы и атрибуты в ComponentModel специально не привязаны к какому-либо конкретному дизайнеру. Хотя я не знаю какого-либо конкретного сценария, который вам нужно будет "выбрать" для того, чтобы он был доступен для просмотра дизайнера, я полагаю, что возможно, что у вас может быть какой-то конструктор компонентов, который предположил бы просмотр (false).
Предположим, вы также можете переопределить виртуальное свойство, указанное спецификацией просмотра (false), и применить просматриваемый (true) в переопределенном элементе.
Визуальный дизайнер обычно отображает в окне "Свойства" те элементы, которые либо не имеют атрибута просмотра, либо отмечены параметром просмотра конструктора BrowsableAttribute, установленным в true. Эти члены могут быть изменены во время разработки. Члены, отмеченные параметром просмотра конструктора BrowsableAttribute, установленным на false, не подходят для редактирования времени разработки и поэтому не отображаются в визуальном дизайнере. По умолчанию используется true.
поэтому ответ вам никогда не придется, как это делается по умолчанию.
В соответствии с документацией вы хотите, чтобы это было правдой, когда оно должно отображаться в окне свойств в VS. В основном это относится к классам, которые используются в дизайнере.
Однажды, когда этот атрибут становится важным, во время разработки WebPart для Sharepoint. В этом сценарии вы предоставляете метаинформацию для Sharepoint, чтобы определить, должен ли ваш веб-сайт быть доступен для выбора и т.д. Существуют и другие аналогичные атрибуты, такие как Category и FriendlyName и т.д., Которые также принимаются во внимание.
Для примера см. следующие примеры:
Создание веб-части с настраиваемыми свойствами
И еще с приличными изображениями редактора веб-частей sharepoint, который отражает ваши атрибуты:
Класс BrowsableAttribute (System.ComponentModel)
В документации указано:
Визуальный дизайнер обычно отображает в окне "Свойства" эти члены которые либо не доступны для просмотра атрибута или отмечены Обозреватель BrowsableAttribute для параметра просмотра доступен значение true.
[Browsable]
также по умолчанию имеет значение true.
... так технически, вам никогда не понадобится [Browsable(true)]
, если вы не хотите быть очень явным.