使用过 Microsoft Visual Basic 或 Microsoft Visual Studio .NET的朋友,一定使用过属性浏览器来浏览、查看或编辑一个或多个对象的属性。.NET 框架 PropertyGrid 控件是 Visual Studio .NET 属性浏览器的核心。PropertyGrid 控件显示对象或类型的属性,并主要通过使用反射(在运行时提供类型信息的技术)来检索项目的属性。PropertyGrid控件包含以下部分:一般属性、可展开属性、属性类别、属性说明和属性编辑器等。
下面,我在我上一篇博客《Winform中DockPanel(引用WeifenLuo.WinFormsUI.Docking.dll组件)的使用》的基础上以代码的形式介绍PropertyGrid控件的使用。
首先,定义一个PropertyGrid控件,并将其添加到DockPanelRight窗体
//为DockPanelLeft窗体添加PropertyGrid控件 propertyGrid = new PropertyGrid(); dockPanelSideRight.Controls.Add(propertyGrid); InitPropertyGrid();private void InitPropertyGrid() {propertyGrid.Location = new Point(0, 0);//propertyGrid.Anchor = AnchorStyles.Left;propertyGrid.Dock = DockStyle.Fill; }
其次,添加一个属性类UserProperty,并自定义属性,属性类UserProperty代码如下:
class UserProperty {private string _AppName;private string _AppPath;private Point _Location;// = new Point(0, 0);private Size _Size = new Size(0, 0);private Color _BackColor;private Color _ForeColor;private Font _Font;private String _Text;[CategoryAttribute("常规"), DescriptionAttribute("应用程序名称"), ReadOnlyAttribute(true)]public string AppName{get{return _AppName;}set{_AppName = value;}}[CategoryAttribute("常规"), DescriptionAttribute("应用程序路径"), ReadOnlyAttribute(true)]public string AppPath{get{return _AppPath;}set{_AppPath = value;}}[CategoryAttribute("布局"), DescriptionAttribute("位置"), ReadOnlyAttribute(false)]public Point Location{get{return _Location;}set{_Location = value;}}[CategoryAttribute("布局"), DescriptionAttribute("尺寸"), ReadOnlyAttribute(false)]public Size Size{get{return _Size;}set{_Size = value;}}[CategoryAttribute("外观"), DescriptionAttribute("背景色"), ReadOnlyAttribute(false)]public Color BackColor{get{return _BackColor;}set{_BackColor = value;}}[CategoryAttribute("外观"), DescriptionAttribute("前景色"), ReadOnlyAttribute(false)]public Color ForeColor{get{return _ForeColor;}set{_ForeColor = value;}}[CategoryAttribute("外观"), DescriptionAttribute("文本")]public String Text{get{return _Text;}set{_Text = value;}}[CategoryAttribute("外观"), DescriptionAttribute("字体")]public Font Font{get{return _Font;}set{_Font = value;}} }
最后,实例化UserProperty类,并将其设定为propertyGrid的SelectedObject属性
//设置PropertyGrid控件的值,自定义属性 propertyUser = new UserProperty(); propertyGrid.SelectedObject = propertyUser; InitPropertyUser(); private void InitPropertyUser() {propertyUser.AppName = this.Text;propertyUser.Size = this.ClientSize;propertyUser.Location = this.Location; }
运行效果如下所示:
要更改某些属性的显示方式,可以对这些属性应用不同的特性。特性是用于为类型、字段、方法和属性等编程元素添加批注的声明标记,在运行时可以使用反射对其进行检索。如下所示:
- DescriptionAttribute 设置显示在属性下方说明帮助窗格中的属性文本。这是一种为活动属性(即具有焦点的属性)提供帮助文本的有效方法。
- CategoryAttribute 设置属性在网格中所属的类别。当您需要将属性按类别名称分组时,此特性非常有用。如果没有为属性指定类别,该属性将被分配给杂项类别。
- BrowsableAttribute 表示是否在网格中显示属性。此特性可用于在网格中隐藏属性。默认情况下,公共属性始终显示在网格中。
- ReadOnlyAttribute 表示属性是否为只读。此特性可用于禁止在网格中编辑属性。默认情况下,带有 get 和 set 访问函数的公共属性在网格中是可以编辑的。
- DefaultValueAttribute 表示属性的默认值。如果希望为属性提供默认值,然后确定该属性值是否与默认值相同,则可使用此特性。可以将此特性应用于所有属性。
- DefaultPropertyAttribute 表示类的默认属性。在网格中选择某个类时,将首先突出显示该类的默认属性。