Когда нам нужно использовать [Browsable (true)]? - PullRequest
21 голосов
/ 25 марта 2010

Когда нам нужно использовать [Browsable(true)]?

EDIT (от SLaks): он спрашивает (я полагаю), почему нужно передавать true в качестве параметра, учитывая, что по умолчанию он уже true.

Ответы [ 9 ]

25 голосов
/ 25 марта 2010

Насколько я знаю, никогда.

EDIT

Я был не прав.
Это необходимо, если вы хотите сделать свойство, которое имеет [Browsable(false)] в вашем базовом классе (например, UserControl.Text), доступным для просмотра.

19 голосов
/ 25 марта 2010

MSDN говорит все это :

Указывает, должно ли свойство или событие отображаться в окне свойств.

Например, если вы создаете пользовательский элемент управления, вам может потребоваться оформить свойства, не связанные с пользовательским интерфейсом, с помощью [Browsable(false)], чтобы они не были доступны через окно «Свойства».

Кроме того, он контролирует, какие свойства объекта можно увидеть в PropertyGrid.

Что касается того, почему мы можем передать true явно, я полагаю, что это связано с BrowsableAttributes свойством PropertyGrid. Вы можете установить для него значение BrowsableAttribute.No, чтобы в сетке свойств отображались все элементы, которые нельзя просматривать.

4 голосов
/ 25 марта 2010

Проблема в том, что все доступно для просмотра по умолчанию . Единственный сценарий, который я могу придумать, где это имеет значение, это переопределение члена и изменение возможности просмотра ... здесь 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; } }
}
4 голосов
/ 25 марта 2010

Вероятно, когда вы хотите убедиться, что никто не изменит его: 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 голос
/ 25 марта 2010

Типы и атрибуты в ComponentModel специально не привязаны к какому-либо конкретному конструктору. Хотя я не знаю какого-либо конкретного сценария, который вам нужно было бы «включить» для просмотра в конструкторе, я полагаю, вполне возможно, что у вас мог бы быть какой-то конструктор компонентов, который предполагал бы просмотр (false).

Полагаю, вы также можете переопределить виртуальное свойство, которое указывает browsable (false), и применить browsable (true) в переопределенном члене.

0 голосов
/ 25 марта 2010

Один из случаев, когда этот атрибут становится важным, - во время разработки WebPart для Sharepoint.В этом сценарии вы предоставляете метаинформацию для Sharepoint, чтобы определить, должна ли ваша веб-часть быть видимой для выбора и т. Д. Существуют и другие подобные атрибуты, такие как Category и FriendlyName и т. Д., Которые также принимаются во внимание.примеры:

Создание веб-части с пользовательскими свойствами

И другой с приличными изображениями редактора веб-частей sharepoint, который отражает ваши атрибуты:

Обеспечение взаимодействия Sharepoint WebParts

0 голосов
/ 25 марта 2010

Согласно документации вы хотите, чтобы она была истинной, когда она должна отображаться в окне свойств в VS. В основном это относится к классам, которые используются в конструкторе.

0 голосов
/ 25 марта 2010

Визуальный конструктор обычно отображает в окне «Свойства» те элементы, которые либо не имеют атрибута browseable, либо отмечены параметром browsable конструктора BrowsableAttribute, установленным в значение true. Эти элементы могут быть изменены во время разработки. Члены, помеченные параметром browsable конструктора BrowsableAttribute, для которого установлено значение false, не подходят для редактирования во время разработки и, следовательно, не отображаются в визуальном конструкторе. По умолчанию true .

Итак, ответ: у вас никогда нет , как это сделано по умолчанию.

0 голосов
/ 25 марта 2010

Класс BrowsableAttribute (System.ComponentModel)

В документации говорится:

Визуальный дизайнер обычно отображает в окне свойств этих членов что либо не имеют просматриваемого атрибут или помечены Конструктор BrowsableAttribute для параметра browsable установлено значение true.

[Browsable] по умолчанию также имеет значение true.

... так что технически вам никогда не понадобится [Browsable(true)], если вы не хотите быть очень явным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...