我们何时需要使用[Browsable(true)]
?
编辑(由SLaks提供):他要求(我假设)为什么需要传递true
作为参数,因为默认情况下它已经true
。 / p>
答案 0 :(得分:25)
答案 1 :(得分:19)
MSDN说it all:
指定是否应在“属性”窗口中显示属性或事件。
例如,如果您正在创建用户控件,则可能需要使用[Browsable(false)]
修饰与UI无关的属性,以便通过“属性”窗口无法使用它们。
此外,它还可以控制PropertyGrid
中的对象的哪些属性。
至于为什么我们可以明确地传递true
,我相信这是由于PropertyGrid
的{{3}}属性。您可以将其设置为包含BrowsableAttributes
,以便属性网格将显示所有不可浏览的成员。
答案 2 :(得分:4)
可能当你想确定没有人改变它时: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.
}
}
答案 3 :(得分:4)
问题是默认情况下可以浏览 。我能想到的唯一场景是覆盖一个成员并且更改可浏览性......这里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 :(得分:1)
ComponentModel中的类型和属性并非特定于任何特定设计器。虽然我不知道你需要“选择加入”设计师可浏览的任何特定场景,但我想可以想象你可以让一些组件设计师假设可浏览(假)。
我想你也可以覆盖指定了可浏览(false)的虚拟属性,并在被覆盖的成员中应用可浏览(true)。
答案 5 :(得分:0)
BrowsableAttribute Class (System.ComponentModel)
文档说明:
视觉设计师通常会显示 在“属性”窗口中的那些成员 要么没有可浏览性 属性或标有 BrowsableAttribute构造函数 可浏览参数设置为true。
[Browsable]
也默认为true。
......从技术上讲,除非你想要非常明确,否则你永远不需要[Browsable(true)]
。
答案 6 :(得分:0)
可视化设计器通常在“属性”窗口中显示那些没有可浏览属性或标记为BrowsableAttribute构造函数的可浏览参数设置为true的成员。可以在设计时修改这些成员。标有BrowsableAttribute构造函数的可浏览参数设置为false的成员不适合设计时编辑,因此不会显示在可视化设计器中。默认值为 true 。
所以,答案是你永远不会拥有,因为它是默认完成的。
答案 7 :(得分:0)
根据the documentation,当它应该显示在VS的属性窗口中时,你希望它是真的。基本上它适用于设计器中使用的类。
答案 8 :(得分:0)
此属性变得重要的一个例子是在Sharepoint的WebPart开发期间。在这种情况下,您将为Sharepoint提供元信息,以确定您的webpart是否应该可供选择等。还有其他类似的属性,如Category和FriendlyName等,这些也被考虑在内。
请参阅以下示例:
Creating a web part with custom properties
还有另一个具有反映你的属性的sharepoint webpart编辑器的合适图像: