WinForm窗體PropertyGrid控件的使用


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM