在C#中使用屬性控件添加屬性窗口
發(fā)表時(shí)間:2024-01-18 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在VS.NET 中,我們可以很方便地使用屬性窗口來(lái)對(duì)某個(gè)控件的屬性進(jìn)行設(shè)置,那么,我們有沒有想過,如果在應(yīng)用程序中,在對(duì)程序中的自定義的屬性進(jìn)行設(shè)置時(shí),顯示一個(gè)象屬性窗口一樣的窗體,能對(duì)其中的屬性方便的設(shè)置呢?就象下圖所示的一樣! 〈鸢甘峭耆梢缘摹N覀兛梢允褂梦④浱峁┑膒roperty屬性控件...
在VS.NET 中,我們可以很方便地使用屬性窗口來(lái)對(duì)某個(gè)控件的屬性進(jìn)行設(shè)置,那么,我們有沒有想過,如果在應(yīng)用程序中,在對(duì)程序中的自定義的屬性進(jìn)行設(shè)置時(shí),顯示一個(gè)象屬性窗口一樣的窗體,能對(duì)其中的屬性方便的設(shè)置呢?就象下圖所示的一樣。
答案是完全可以的。我們可以使用微軟提供的property屬性控件來(lái)實(shí)現(xiàn)該功能。首先,我們新建一個(gè)c#的windows應(yīng)用程序,之后在工具箱中,鼠標(biāo)右鍵點(diǎn)選工具箱(TOOLBOX),在彈出的菜單中選擇“添加/移除項(xiàng)”,如下圖所示:
在彈出的窗口中,選擇.NET Freamwork components窗口,再選擇其中的property grid控件,點(diǎn)擊選擇就完成了對(duì)控件的加入,如下圖所示:
現(xiàn)在,我們可以開始使用該控件了。第一步,創(chuàng)建在應(yīng)用程序中將要展現(xiàn)的字段屬性為public公有屬性。其中,所有的屬性必須有g(shù)et和set的方法(如果不設(shè)置get方法,則要顯示的屬性不會(huì)顯示在屬性控件中)。為了設(shè)置相關(guān)的屬性,必須設(shè)置下面的一些關(guān)于屬性控件的屬性值,如下表所示:
屬性值 | 含義 |
CategoryAttribute | 該屬性對(duì)在Property控件中的屬性按字母順序進(jìn)行歸類 |
DescriptionAttribute | 其值為對(duì)每個(gè)屬性的具體文字描述,將會(huì)顯示在property控件的底部 |
BrowsableAttribute | 該值為是否在property控件中顯示或者隱藏某個(gè)屬性 |
ReadOnlyAttribute | 該值為某個(gè)屬性值是否在property控件中只讀 |
DefaultValueAttribute | 每個(gè)屬性的默認(rèn)值 |
接下來(lái),我們創(chuàng)建一個(gè)用戶類,并且使用屬性控件,使得可以在屬性控件框中改變其值。我們先引入相關(guān)的命名空間:
using System.ComponentModel; |
之后,創(chuàng)建相關(guān)的類,設(shè)置有關(guān)的屬性,代碼如下:
/// Customer class to be displayed in the property grid /// </summary> /// [DefaultPropertyAttribute("Name")] public class Customer { private string _name; private int _age; private DateTime _dateOfBirth; private string _SSN; private string _address; private string _email; private bool _frequentBuyer; [CategoryAttribute("ID Settings"), DescriptionAttribute("Name of the customer")] public string Name { get { return _name; } set { _name = value; } } [CategoryAttribute("ID Settings"), DescriptionAttribute("Social Security Number of the customer")]
public string SSN { get { return _SSN; } set { _SSN = value; } } [CategoryAttribute("ID Settings"), DescriptionAttribute("Address of the customer")] public string Address { get { return _address; } set { _address = value; } } [CategoryAttribute("ID Settings"), DescriptionAttribute("Date of Birth of the Customer (optional)")] public DateTime DateOfBirth { get { return _dateOfBirth; } set { _dateOfBirth = value; } } [CategoryAttribute("ID Settings"), DescriptionAttribute("Age of the customer")] public int Age { get { return _age; } set { _age = value; } } [CategoryAttribute("Marketting Settings"), DescriptionAttribute("If the customer has bought more than 10 times, this is set to true")] public bool FrequentBuyer { get { return _frequentBuyer; } set { _frequentBuyer = value; } } [CategoryAttribute("Marketting Settings"), DescriptionAttribute("Most current e-mail of the customer")] public string Email { get { return _email; } set { _email = value; } } public Customer() { } } |
可以看到,在上面的代碼中,我們對(duì)customer類中的屬性進(jìn)行了設(shè)置,如姓名,出生日期,地址等。
接著,我們要為創(chuàng)建的customer類創(chuàng)建一個(gè)實(shí)例,并且將其與屬性控件綁定。屬性控件會(huì)自動(dòng)根據(jù)類中對(duì)屬性的相關(guān)設(shè)置,從而在界面中顯示有關(guān)的屬性,并且還可以進(jìn)行編輯,比如,可以對(duì)生日屬性進(jìn)行修改,修改時(shí)會(huì)彈出日歷控件框,十分方便。代碼如下:
private void Form1_Load(object sender, System.EventArgs e) { //創(chuàng)建bill對(duì)象,實(shí)例化CUSTOMER類 Customer bill = new Customer(); //賦值給屬性 bill.Age = 50; bill.Address = " 114 Maple Drive "; bill.DateOfBirth = Convert.ToDateTime(" 9/14/78"); bill.SSN = "123-345-3566"; bill.Email = “bill@aol.com” bill.Name = "Bill Smith"; //將對(duì)象綁定到property控件中 propertyGrid1.SelectedObject = bill; } |
最后,運(yùn)行程序,我們就得到了本文一開始圖示的結(jié)果了。再來(lái)回顧下該程序,其中我們使用了CatrgoryAttribute屬性,定義了id settings和MarketSettings,它們?cè)趯傩钥丶幸苑诸惖男问匠霈F(xiàn)(注意它們前有個(gè)“+”號(hào),點(diǎn)擊可以展開看到其子屬性)。同時(shí),我們每當(dāng)選擇一個(gè)屬性時(shí),在屬性控件框的下部,會(huì)同時(shí)顯示該屬性的相關(guān)描述。
Property屬性控件還有很多優(yōu)點(diǎn),本文只是對(duì)其做了簡(jiǎn)單介紹,希望能給讀者啟發(fā)。