使用過 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 表示類的默認屬性。在網格中選擇某個類時,將首先突出顯示該類的默認屬性。
