NET框架PropertyGrid控件是 Visual Studio .NET 屬性瀏覽器的核心。PropertyGrid控件顯示對(duì)象或類(lèi)型的屬性,并主要通過(guò)使用反射來(lái)檢索項(xiàng)目的屬性
創(chuàng)新互聯(lián)主要從事做網(wǎng)站、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)靈丘,10年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):18982081108首先創(chuàng)建 PropertyGrid控件要使用 Visual Studio .NET 創(chuàng)建 PropertyGrid控件,需要將該控件添加到工具箱中,因?yàn)槟J(rèn)情況下并不包含該控件。在 Tools(工具)菜單中,選擇 Customize Toolbox(自定義工具箱)。在對(duì)話框中選擇 Framework Components(框架組件)選項(xiàng)卡,然后選擇 PropertyGrid。
PropertyGrid包含以下部分:
· 屬性
· 可展開(kāi)屬性
· 屬性類(lèi)別標(biāo)題
· 屬性說(shuō)明
· 屬性編輯器
· 屬性選項(xiàng)卡
· 命令窗格(顯示控件設(shè)計(jì)器提供的設(shè)計(jì)器操作)
PropertyGrid的外觀特征
· PropertyGrid 的許多外觀特征都可以自定義。下面列出了其中的一部分:
· 通過(guò) HelPBackColor、HelpForeColor和 HelpVisible屬性可以更改背景顏色、更改字體顏色或隱藏說(shuō)明窗
· 通過(guò) ToolbarVisible屬性可以隱藏工具欄,通過(guò) BackColor屬性可以更改工具欄的顏色,通過(guò) LargeButtons屬性可以顯示大工具欄按鈕。
· 使用 PropertySort屬性可以按字母順序?qū)傩赃M(jìn)行排序和分類(lèi)。
· 通過(guò) BackColor屬性可以更改拆分器的顏色。
· 通過(guò) LineColor屬性可以更改網(wǎng)格線和邊框。
· 本示例中的選項(xiàng)窗口不需要工具欄,因此可以將ToolbarVisible設(shè)置為 false。其余屬性均保留默認(rèn)設(shè)置。
更改屬性的顯示方式
要更改某些屬性的顯示方式,您可以對(duì)這些屬性應(yīng)用不同的特性。特性是用于為類(lèi)型、字段、方法和屬性等編程元素添加批注的聲明標(biāo)記,在運(yùn)行時(shí)可以使用反射對(duì)其進(jìn)行檢索。下面列出了其中的一部分:
DescriptionAttribute - 設(shè)置顯示在屬性下方說(shuō)明幫助窗格中的屬性文本。這是一種為活動(dòng)屬性(即具有焦點(diǎn)的屬性)提供幫助文本的有效方法??梢詫⒋颂匦詰?yīng)用于 MaxRepeatRate 屬性。
CategoryAttribute - 設(shè)置屬性在網(wǎng)格中所屬的類(lèi)別。當(dāng)您需要將屬性按類(lèi)別名稱(chēng)分組時(shí),此特性非常有用。如果沒(méi)有為屬性指定類(lèi)別,該屬性將被分配給雜項(xiàng)類(lèi)別。可以將此特性應(yīng)用于所有屬性。
BrowsableAttribute – 表示是否在網(wǎng)格中顯示屬性。此特性可用于在網(wǎng)格中隱藏屬性。默認(rèn)情況下,公共屬性始終顯示在網(wǎng)格中??梢詫⒋颂匦詰?yīng)用于 SettingsChanged 屬性。
ReadOnlyAttribute – 表示屬性是否為只讀。此特性可用于禁止在網(wǎng)格中編輯屬性。默認(rèn)情況下,帶有 get 和 set 訪問(wèn)函數(shù)的公共屬性在網(wǎng)格中是可以編輯的??梢詫⒋颂匦詰?yīng)用于 AppVersion 屬性。
DefaultValueAttribute – 表示屬性的默認(rèn)值。如果希望為屬性提供默認(rèn)值,然后確定該屬性值是否與默認(rèn)值相同,則可使用此特性??梢詫⒋颂匦詰?yīng)用于所有屬性。
DefaultPropertyAttribute – 表示類(lèi)的默認(rèn)屬性。在網(wǎng)格中選擇某個(gè)類(lèi)時(shí),將首先突出顯示該類(lèi)的默認(rèn)屬性。
PropertyGrid有一個(gè) property 為「SelectedObject」,用來(lái)指向所關(guān)連的物件。如下所示:
Class newclass=newClass(); (例:propertyGrid控件)
propertyGrid1.SelectedObject = newclass;
PropertyGrid主要應(yīng)用:
1.自定義一個(gè)布爾型的屬性下拉框:
private bool _bool;
[CategoryAttribute("布爾型"), DescriptionAttribute("布爾型")]
public bool 布爾型
{
get { return _bool; }
set { _bool = value;}
}
2.自定義一個(gè)枚舉型的屬性下拉框:
publicenum s
{
a = 1,
b = 2,
c = 4
}
private s test = s.a;
[CategoryAttribute("枚舉型"), DescriptionAttribute("這是一個(gè)枚舉的下拉框")]
public s 枚舉
{
get { return test; }
set { test = value; }
}
3.自定義一個(gè)INT數(shù)組類(lèi)型屬性對(duì)話框:
privateint[] arr;
[CategoryAttribute("數(shù)組型"), DescriptionAttribute("這是一個(gè)數(shù)組的對(duì)話框")]
public int[] 數(shù)組
{
get { return arr; }
set { arr = value; }
}
4 屬性轉(zhuǎn)換器(TypeConverter)
//自定義的StringConverter類(lèi)型設(shè)置(包括自定義類(lèi)型轉(zhuǎn)換器
privatestring _fileName="1";
[CategoryAttribute("自定義的復(fù)雜類(lèi)型設(shè)置(包括自定義類(lèi)型轉(zhuǎn)換器)"),TypeConverterAttribute(typeof(FileNameConverter)), ReadOnlyAttribute(false)]
publicstring FileName
{
get{ return this._fileName;}
set{ this._fileName = value;}
}
//定義一個(gè)FileNameConverter繼承 StringConverter轉(zhuǎn)換器
publicclass FileNameConverter: System.ComponentModel.StringConverter
{
///
///根據(jù)返回值確定是否支持下拉框的形式
///
///
/// true: 下來(lái)框的形式
/// false: 普通文本編輯的形式
///
publicoverride boolGetStandardValuesSupported(System.ComponentModel.ITypeDescriptorContextcontext)
{
return true;
}
///下拉框中具體的內(nèi)容
publicoverride System.ComponentModel.TypeConverter.StandardValuesCollectionGetStandardValues(System.ComponentModel.ITypeDescriptorContextcontext)
{
return new StandardValuesCollection(newstring[] { "1","2", "3"});
}
///根據(jù)返回值確定是否是不可編輯的文本框
/// true: 文本框不可以編輯
/// flase: 文本框可以編輯
publicoverride boolGetStandardValuesExclusive(System.ComponentModel.ITypeDescriptorContextcontext)
{
return true;
}
}
5.自定義一個(gè)帶圖片的屬性
privateGrade x = newGrade(100);
publicGrade X
{
get
{
return x;
}
set
{
x = value;
}
}
///指定用作此屬性所綁定到的對(duì)象的轉(zhuǎn)換器的類(lèi)型
[TypeConverterAttribute(typeof(ExpandableObjectConverter)),Category("自定義帶圖片屬性"), Description("自定義帶圖片屬性")]
//指定用來(lái)更改屬性的編輯器
[Editor(typeof(GradeEditor),typeof(UITypeEditor))]
publicstruct Grade
{
privateint grade;
publicGrade(int grade)
{
this.grade = grade;
}
publicint Value
{
get
{
return grade;
}
}
}
publicclass GradeEditor: UITypeEditor
{
// 指示指定的上下文是否支持在指定的上下文內(nèi)繪制對(duì)象值的表示形式。
//
//參數(shù):
// context:
// 可用于獲取附加上下文信息的 System.ComponentModel.ITypeDescriptorContext。
//
//返回結(jié)果:
// 如果實(shí)現(xiàn)System.Drawing.Design.UITypeEditor.PaintValue(System.Object,System.Drawing.Graphics,System.Drawing.Rectangle),則為
// true;否則為 false。
publicoverride boolGetPaintValueSupported(ITypeDescriptorContextcontext)
{
return true;
}
//使用指定的System.Drawing.Design.PaintValueEventArgs 繪制某個(gè)對(duì)象的值的表示形式。
publicoverride voidPaintValue(PaintValueEventArgs pe)
{
// 選擇根據(jù)valu的正確的位圖
string bmpName = null;
Grade g = (Grade)pe.Value;
if (g.Value > 80)
{ //可修改 bmpName à圖片
// bmpName = @"C:\Documents andSettings\Administrator\桌面\ll\ll\2.ico";
}
else if (g.Value >60)
{
//bmpName = @"C:\Documents and Settings\Administrator\桌面\ll\ll\3.ico";
}
else
{
// bmpName = @"C:\Documents andSettings\Administrator\桌面\ll\ll\4.ico";
}
// 畫(huà)在表面上的位圖提供了// 多個(gè)圖片Bitmap b = new Bitmap(typeof(GradeEditor),bmpName)。
Bitmap b = new Bitmap(global::propertyGrid.Properties.Resources.t1);
//指示繪制內(nèi)容和繪制位置 pe.Bounds-->獲取圖片是矩形
pe.Graphics.DrawImage(b, pe.Bounds);
//釋放圖象的對(duì)象
b.Dispose();
}
}
如圖1所示: 如圖2所示:
6屬性框選項(xiàng)卡的擴(kuò)展 -à屬性窗口的工具欄上有一個(gè)像閃電的按鈕,按下這個(gè)按鈕屬性窗口就會(huì)切換到屬性二
//標(biāo)識(shí)為要顯示的屬性選項(xiàng)卡 PropertyTabScope.Component:此選項(xiàng)卡被添加到當(dāng)前的”屬性“窗口中去
[PropertyTabAttribute(typeof(TypeCategoryTab),PropertyTabScope.Component)]
classClass
{
private string _屬性二 ;
[BrowsableAttribute(false)]
public string屬性二
{
get{return _屬性二; }
set{ _屬性二=value;}
}
public classTypeCategoryTab :System.Windows.Forms.Design.PropertyTab
{
// 提供自定義一個(gè) 選項(xiàng)卡按扭 名字
publicoverride stringTabName
{
get
{
return"屬性(二)";
}
}
// 提供選項(xiàng)卡按扭 的位圖
publicoverride System.Drawing.Bitmap Bitmap
{
get
{
Bitmapbmp = new Bitmap(global::propertyGrid.Properties.Resources.t1);
returnbmp;
}
}
//獲取指定組件屬性的集合的對(duì)象
//component:檢索屬性的組件
//attributes:檢索的屬性(Property) 的屬性 (Attribute) 的System.Attribute 類(lèi)型的數(shù)組
publicoverride System.ComponentModel.PropertyDescriptorCollection GetProperties(object component, System.Attribute[]attributes)
{///檢索 屬性框中屬性為隱藏的->[BrowsableAttribute(false)]的屬性集合
PropertyDescriptorCollectionprops;
Attribute[]att = new Attribute[]{ BrowsableAttribute.No};
if(attributes == null)
props = TypeDescriptor.GetProperties(component);
else
props = TypeDescriptor.GetProperties(component, att);
return props;
}
/// 獲取指定組件的屬性。
publicoverride System.ComponentModel.PropertyDescriptorCollection GetProperties(object component)
{
return this.GetProperties(component,null);
}
}
}
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。