我们什么时候需要使用?
我们什么时候需要使用[Browsable(true)]
?
编辑 (由SLaks):他要求(我假设)为什么人们需要传递true
作为参数,因为默认情况下它已经是true
。
MSDN说明了一切 :
指定是否应在“属性”窗口中显示属性或事件。
例如,如果您正在创建用户控件,则可能需要使用[Browsable(false)]
修饰与UI无关的属性,以便它们不会通过“属性”窗口提供。
此外,它还可以控制PropertyGrid
可以看到对象的哪些属性。
至于为什么我们可以明确地传递true
,我相信这是由于PropertyGrid
BrowsableAttributes
属性。 您可以将其设置为包含BrowsableAttribute.No
,以便属性网格将显示所有不可浏览的成员。
据我所知,永远不会。
编辑
我错了。
如果你想在你的基类中创建一个[Browsable(false)]
属性(例如UserControl.Text
)可以浏览它是必要的。
问题是默认情况下可以浏览。 我能想到的唯一场景是覆盖一个成员并改变可浏览性……这里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; } } }
可能当你想确定没有人改变它时: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. } }
ComponentModel中的类型和属性并不特定地绑定到任何特定的设计器。 虽然我不知道你需要“选择加入”设计师可浏览的任何特定场景,但我想可以想象你可以让一些组件设计师假设可浏览(假)。
我想你也可以覆盖一个指定了可浏览(false)的虚拟属性,并在被覆盖的成员中应用可浏览(true)。
可视化设计器通常在“属性”窗口中显示那些没有可浏览属性或标记为BrowsableAttribute构造函数的可浏览参数设置为true的成员。 可以在设计时修改这些成员。 标记为BrowsableAttribute构造函数的可浏览参数设置为false的成员不适合设计时编辑,因此不会显示在可视设计器中。 默认值为true 。
所以,答案是你永远不必 ,因为它是默认完成的。
根据文档 ,当它应该显示在VS的属性窗口中时,您希望它是真实的。 基本上它适用于设计器中使用的类。
BrowsableAttribute类(System.ComponentModel)
文件说明:
可视化设计器通常在“属性”窗口中显示那些没有可浏览属性或标记为BrowsableAttribute构造函数的可浏览参数设置为true的成员。
[Browsable]
也默认为true。
……从技术上讲,你永远不需要[Browsable(true)]
除非你想要非常明确。
此属性变得重要的一个例子是在Sharepoint的WebPart开发期间。 在这种情况下,您将为Sharepoint提供元信息,以确定您的webpart是否应该可供选择等。还有其他类似的属性,如Category和FriendlyName等,这些也被考虑在内。
请参阅以下示例:
使用自定义属性创建Web部件
另一个有sharepoint webpart编辑器的图像反映了你的属性:
使Sharepoint WebParts互动
- 哪个更快:DateTime.TryParse或Regex
- SerialPort.Open()抛出IOException – 没有足够的系统资源来完成所请求的服务
- 使用swagger的Web API文档
- 如何在Windows任务栏中隐藏我的应用程序表单?
- 在Windows 8 Metro风格的应用程序中使用.NET GeoCoordinate.GetDistanceTo等效
- 条目Xamarin表格PCL上的边界半径
- SlimDX Device.Reset崩溃,出现“D3DERR_INVALIDCALL:无效呼叫(-2005530516)”错误
- 名称空间’System.Net’中不存在类型或命名空间名称’Http’
- Winforms ListView选择图?