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