使用过 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 表示类的默认属性。在网格中选择某个类时,将首先突出显示该类的默认属性。
时间: 2024-10-10 02:04:38