Propertyrid所有用法.docx
《Propertyrid所有用法.docx》由会员分享,可在线阅读,更多相关《Propertyrid所有用法.docx(40页珍藏版)》请在冰点文库上搜索。
Propertyrid所有用法
PropertyGrid控件简介
如果您使用过Microsoft?
VisualBasic?
或MicrosoftVisualStudio.NET,那么您一定使用过属性浏览器来浏览、查看和编辑一个或多个对象的属性。
.NET框架PropertyGrid控件是VisualStudio.NET属性浏览器的核心。
PropertyGrid控件显示对象或类型的属性,并主要通过使用反射来检索项目的属性。
(反射是在运行时提供类型信息的技术。
)
下面的屏幕快照显示了PropertyGrid在窗体上的外观。
图1:
窗体上的PropertyGrid
PropertyGrid包含以下部分:
∙属性
∙可展开属性
∙属性类别标题
∙属性说明
∙属性编辑器
∙属性选项卡
∙命令窗格(显示控件设计器提供的设计器操作)
创建PropertyGrid控件
要使用VisualStudio.NET创建PropertyGrid控件,需要将该控件添加到工具箱中,因为默认情况下并不包含该控件。
在Tools(工具)菜单中,选择CustomizeToolbox(自定义工具箱)。
在对话框中选择FrameworkComponents(框架组件)选项卡,然后选择PropertyGrid。
如果您从命令行编译代码,请使用/reference
以下代码显示了如何创建PropertyGrid控件并将其添加到窗体中。
1.usingSystem;
2.usingSystem.Drawing;
3.usingSystem.ComponentModel;
4.usingSystem.Globalization;
5.{
6.publicOptionsDialog()
7.{
8.OptionsPropertyGrid=newPropertyGrid();
9.OptionsPropertyGrid.Size=newSize(300,250);
10.this.Text="选项对话框";
11.}
12.[STAThread]
13.staticvoidMain()
14.{
15.Application.Run(newOptionsDialog());
16.}
17.}
何处使用PropertyGrid控件
在应用程序中的很多地方,您都可以使用户与PropertyGrid进行交互,从而获得更丰富的编辑体验。
例如,某个应用程序包含多个用户可以设置的“设置”或选项,其中一些可能十分复杂。
您可以使用单选按钮、组合框或文本框来表示这些选项。
但本文将逐步介绍如何使用PropertyGrid控件创建选项窗口来设置应用程序选项。
上面所创建的OptionsDialog窗体即是选项窗口的开始。
现在,我们创建一个名为AppSettings的类,其中包含映射到应用程序设置的所有属性。
如果创建单独的类而不使用多个分散的变量,设置将更便于管理和维护。
1.publicclassAppSettings{
2.privateboolsaveOnClose=true;
3.privatestringgreetingText="欢迎使用应用程序!
";
4.privateintitemsInMRU=4;
5.privateintmaxRepeatRate=10;
6.privateboolsettingsChanged=false;
7.privatestringappVersion="1.0";
8.publicboolSaveOnClose
9.{
10.get{returnsaveOnClose;}
11.set{saveOnClose=value;}
12.}
13.publicstringGreetingText
14.{
15.get{returngreetingText;}
16.set{greetingText=value;}
17.}
18.publicintMaxRepeatRate
19.{
20.get{returnmaxRepeatRate;}
21.set{maxRepeatRate=value;}
22.}
23.publicintItemsInMRUList
24.{
25.get{returnitemsInMRU;}
26.set{itemsInMRU=value;}
27.}
28.publicboolSettingsChanged
29.{
30.get{returnsettingsChanged;}
31.set{settingsChanged=value;}
32.}
33.publicstringAppVersion
34.{
35.get{returnappVersion;}
36.set{appVersion=value;}
37.}
38.}
选项窗口上的PropertyGrid将使用此类,因此请将类定义添加到应用程序项目中,在添加时可创建新文件或将其添加到现有窗体源代码的下方。
选择对象
要标识PropertyGrid显示的内容,请将PropertyGrid.SelectedObject属性设置为一个对象实例。
然后,PropertyGrid将完成其余的工作。
每次设置SelectedObject时,PropertyGrid都会刷新显示的属性。
这提供了一种简单的方法来强制刷新属性,或在运行时切换对象。
您还可以调用PropertyGrid.Refresh方法来刷新属性。
接下来,您需要更新OptionsDialog构造函数中的代码,以创建一个AppSettings对象,并将其设置为PropertyGrid.SelectedObject属性的值。
1.publicOptionsDialog()
2.{
3.OptionsPropertyGrid=newPropertyGrid();
4.OptionsPropertyGrid.Size=newSize(300,250);
5.this.Text="选项对话框";
6.//创建AppSettings类并在PropertyGrid中显示该类。
7.AppSettingsappset=newAppSettings();
8.OptionsPropertyGrid.SelectedObject=appset;
9.}
编译并运行该应用程序。
下面的屏幕快照显示了应用程序的外观。
图2:
PropertyGrid中选定的AppSettings类
自定义PropertyGrid控件
您可以修改PropertyGrid的某些外观特征以满足自己的需要。
可以更改某些属性的显示方式,甚至选择不显示某些属性。
那么,如何对PropertyGrid进行自定义呢?
更改PropertyGrid的外观特征
PropertyGrid的许多外观特征都可以自定义。
下面列出了其中的一部分:
∙通过HelpBackColor、HelpForeColor和HelpVisible属性可以更改背景颜色、更改字体颜色或隐藏说明窗格。
∙通过ToolbarVisible属性可以隐藏工具栏,通过BackColor属性可以更改工具栏的颜色,通过LargeButtons属性可以显示大工具栏按钮。
∙使用PropertySort属性可以按字母顺序对属性进行排序和分类。
∙通过BackColor属性可以更改拆分器的颜色。
∙通过LineColor属性可以更改网格线和边框。
本示例中的选项窗口不需要工具栏,因此可以将ToolbarVisible设置为false。
其余属性均保留默认设置。
更改属性的显示方式
要更改某些属性的显示方式,您可以对这些属性应用不同的特性。
特性是用于为类型、字段、方法和属性等编程元素添加批注的声明标记,在运行时可以使用反射对其进行检索。
下面列出了其中的一部分:
∙DescriptionAttribute-设置显示在属性下方说明帮助窗格中的属性文本。
这是一种为活动属性(即具有焦点的属性)提供帮助文本的有效方法。
可以将此特性应用于MaxRepeatRate属性。
∙CategoryAttribute-设置属性在网格中所属的类别。
当您需要将属性按类别名称分组时,此特性非常有用。
如果没有为属性指定类别,该属性将被分配给杂项类别。
可以将此特性应用于所有属性。
∙BrowsableAttribute–表示是否在网格中显示属性。
此特性可用于在网格中隐藏属性。
默认情况下,公共属性始终显示在网格中。
可以将此特性应用于SettingsChanged属性。
∙ReadOnlyAttribute–表示属性是否为只读。
此特性可用于禁止在网格中编辑属性。
默认情况下,带有get和set访问函数的公共属性在网格中是可以编辑的。
可以将此特性应用于AppVersion属性。
∙DefaultValueAttribute–表示属性的默认值。
如果希望为属性提供默认值,然后确定该属性值是否与默认值相同,则可使用此特性。
可以将此特性应用于所有属性。
∙DefaultPropertyAttribute–表示类的默认属性。
在网格中选择某个类时,将首先突出显示该类的默认属性。
可以将此特性应用于AppSettings类。
现在,我们将其中的一些特性应用于AppSettings类,以更改属性在PropertyGrid中的显示方式。
1.[DefaultPropertyAttribute("SaveOnClose")]
2.publicclassAppSettings{
3.privateboolsaveOnClose=true;
4.privatestringgreetingText="欢迎使用应用程序!
";
5.privateintmaxRepeatRate=10;
6.privateintitemsInMRU=4;
7.privateboolsettingsChanged=false;
8.privatestringappVersion="1.0";
9.[CategoryAttribute("文档设置"),
10.DefaultValueAttribute(true)]
11.publicboolSaveOnClose
12.{
13.get{returnsaveOnClose;}
14.set{saveOnClose=value;}
15.}
16.[CategoryAttribute("全局设置"),
17.ReadOnlyAttribute(true),
18.DefaultValueAttribute("欢迎使用应用程序!
")]
19.publicstringGreetingText
20.{
21.get{returngreetingText;}
22.set{greetingText=value;}
23.}
24.[CategoryAttribute("全局设置"),
25.DefaultValueAttribute(4)]
26.publicintItemsInMRUList
27.{
28.get{returnitemsInMRU;}
29.set{itemsInMRU=value;}
30.}
31.[DescriptionAttribute("以毫秒表示的文本重复率。
"),
32.CategoryAttribute("全局设置"),
33.DefaultValueAttribute(10)]
34.publicintMaxRepeatRate
35.{
36.get{returnmaxRepeatRate;}
37.set{maxRepeatRate=value;}
38.}
39.[BrowsableAttribute(false),
40.DefaultValueAttribute(false)]
41.publicboolSettingsChanged
42.{
43.get{returnsettingsChanged;}
44.set{settingsChanged=value;}
45.}
46.[CategoryAttribute("版本"),
47.DefaultValueAttribute("1.0"),
48.ReadOnlyAttribute(true)]
49.publicstringAppVersion
50.{
51.get{returnappVersion;}
52.set{appVersion=value;}
53.}
54.}
将这些特性应用于AppSettings类后,编译并运行该应用程序。
下面的屏幕快照显示了应用程序的外观。
图3:
PropertyGrid中显示的带有类别和默认值的属性
使用此版本的选项窗口后,您会注意到以下几点:
∙显示窗口时,将首先突出显示SaveOnClose属性。
∙选中MaxRepeatRate属性时,说明帮助窗格中将显示“以毫秒表示的文本重复率”。
∙SaveOnClose属性显示在“文档设置”类别下。
其他属性分别显示在“全局设置”和“版本”类别下。
∙SettingsChanged属性将不再显示。
∙AppVersion属性为只读。
只读属性以灰显文本显示。
∙如果SaveOnClose属性包含的值不是true,该值将以粗体显示。
PropertyGrid使用粗体文本表示包含非默认值的属性。
显示复杂属性
到现在为止,选项窗口显示的都是简单的类型,如整数、布尔值和字符串。
那么,如何显示更复杂的类型呢?
如果应用程序需要跟踪窗口大小、文档字体或工具栏颜色等信息,该如何处理呢?
.NET框架提供的某些数据类型具有特殊的显示功能,能使这些类型在PropertyGrid中更具可用性。
对所提供类型的支持
首先,请更新AppSettings类,为窗口大小(Size类型)、窗口字体(Font类型)和工具栏颜色(Color类型)添加新属性。
1.[DefaultPropertyAttribute("SaveOnClose")]
2.publicclassAppSettings{
3.privateboolsaveOnClose=true;
4.privatestringgreetingText="欢迎使用应用程序!
";
5.privateintmaxRepeatRate=10;
6.privateintitemsInMRU=4;
7.privateboolsettingsChanged=false;
8.privatestringappVersion="1.0";
9.privateSizewindowSize=newSize(100,100);
10.privateFontwindowFont=newFont("宋体",9,FontStyle.Regular);
11.privateColortoolbarColor=SystemColors.Control;
12.[CategoryAttribute("文档设置"),
13.DefaultValueAttribute(true)]
14.publicboolSaveOnClose
15.{
16.get{returnsaveOnClose;}
17.set{saveOnClose=value;}
18.}
19.[CategoryAttribute("文档设置")]
20.publicSizeWindowSize
21.{
22.get{returnwindowSize;}
23.set{windowSize=value;}
24.}
25.[CategoryAttribute("文档设置")]
26.publicFontWindowFont
27.{
28.get{returnwindowFont;}
29.set{windowFont=value;}
30.}
31.[CategoryAttribute("全局设置")]
32.publicColorToolbarColor
33.{
34.get{returntoolbarColor;}
35.set{toolbarColor=value;}
36.}
37.[CategoryAttribute("全局设置"),
38.ReadOnlyAttribute(true),
39.DefaultValueAttribute("欢迎使用应用程序!
")]
40.publicstringGreetingText
41.{
42.get{returngreetingText;}
43.set{greetingText=value;}
44.}
45.[CategoryAttribute("全局设置"),
46.DefaultValueAttribute(4)]
47.publicintItemsInMRUList
48.{
49.get{returnitemsInMRU;}
50.set{itemsInMRU=value;}
51.}
52.[DescriptionAttribute("以毫秒表示的文本重复率。
"),
53.CategoryAttribute("全局设置"),
54.DefaultValueAttribute(10)]
55.publicintMaxRepeatRate
56.{
57.get{returnmaxRepeatRate;}
58.set{maxRepeatRate=value;}
59.}
60.[BrowsableAttribute(false),
61.DefaultValueAttribute(false)]
62.publicboolSettingsChanged
63.{
64.get{returnsettingsChanged;}
65.set{settingsChanged=value;}
66.}
67.[CategoryAttribute("版本"),
68.DefaultValueAttribute("1.0"),
69.ReadOnlyAttribute(true)]
70.publicstringAppVersion
71.{
72.get{returnappVersion;}
73.set{appVersion=value;}
74.}
75.}
下面的屏幕快照显示了新属性在PropertyGrid中的外观。
图4:
显示在PropertyGrid中的.NET框架数据类型
请注意,WindowFont属性带有一个省略号(...)按钮,按下该按钮将显示字体选择对话框。
此外,还可以展开该属性以显示更多的Font属性。
某些Font属性提供有关字体的值和详细信息的下拉列表。
您可以展开WindowSize属性以显示Size类型的更多属性。
最后,请注意,ToolbarColor属性包含一个选定颜色的样本,以及一个用于选择不同颜色的自定义下拉列表。
对于这些以及其他数据类型,.NET框架提供了其他的类,可以使在PropertyGrid中的编辑更加容易。
对自定义类型的支持
现在,您需要在AppSettings类中添加另外两个属性,即DefaultFileName和SpellCheckOptions。
DefaultFileName属性用于获取或设置字符串;SpellCheckOptions属性用于获取或设置SpellingOptions类的实例。
SpellingOptions类是一个新类,用于管理应用程序的拼写检查属性。
对于何时创建单独的类以管理对象的属性,并没有严格的规定,而取决于您的整个类设计。
将SpellingOptions类定义添加到应用程序项目中-可以添加到新文件中,也可以添加到窗体源代码的下方。
1.[DescriptionAttribute("展开以查看应用程序的拼写选项。
")]
2.publicclassSpellingOptions{
3.privateboolspellCheckWhileTyping=true;
4.privateboolspellCheckCAPS=false;
5.privateboolsuggestCorrections=true;
6.[DefaultValueAttribute(true)]
7.publicboolSpellCheckWhileTyping
8.{
9.get{returnspellCheckWhileTyping;}
10.set{spellCheckWhileTyping=value;}
11.}
12.[DefaultValueAttribute(false)]
13.publicboolSpellCheckCAPS
14.{
15.get{returnspellCheckCAPS;}
16.set{spellCheckCAPS=value;}
17.}
18.[DefaultValueAttribute(true)]
19.publicboolSuggestCorrections
20.{
21.get{ret