C# PropertyGrid控件应用心得.docx
- 文档编号:30077511
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:64
- 大小:118.04KB
C# PropertyGrid控件应用心得.docx
《C# PropertyGrid控件应用心得.docx》由会员分享,可在线阅读,更多相关《C# PropertyGrid控件应用心得.docx(64页珍藏版)》请在冰豆网上搜索。
C#PropertyGrid控件应用心得
C#PropertyGrid控件应用心得
2010-03-2911:
29 15947人阅读 评论(47) 收藏 举报
目录(?
)[+]
最近项目中做一模块时偶发奇想,希望使用propertygrid的控件实现类似visualstudio的属性样式,于是拿来一用,发现还真不是自己想象的那么简单,如果要实现一个比较好的展示,还真的需要不少技巧,通过自己的实践和网络的力量,“逢山开道,遇水搭桥”,总算是摸出一些门道,不敢私藏,拿出来与大家分享,呵呵。
先来转一个基础的,源自msdn
摘要:
本文旨在帮助您了解Microsoft.NET框架中的PropertyGrid控件,以及如何针对您的应用程序自定义该控件。
适用于:
Microsoft®.NET®框架
Microsoft®VisualStudio®.NET
PropertyGrid控件简介
创建PropertyGrid控件
何处使用PropertyGrid控件
选择对象
自定义PropertyGrid控件
显示复杂属性
为属性提供自定义UI
PropertyGrid控件简介
如果您使用过Microsoft®VisualBasic®或MicrosoftVisualStudio.NET,那么您一定使用过属性浏览器来浏览、查看和编辑一个或多个对象的属性。
.NET框架 PropertyGrid 控件是VisualStudio.NET属性浏览器的核心。
PropertyGrid 控件显示对象或类型的属性,并主要通过使用反射来检索项目的属性。
(反射是在运行时提供类型信息的技术。
)
下面的屏幕快照显示了 PropertyGrid 在窗体上的外观。
图1:
窗体上的PropertyGrid
PropertyGrid 包含以下部分:
∙属性
∙可展开属性
∙属性类别标题
∙属性说明
∙属性编辑器
∙属性选项卡
∙命令窗格(显示控件设计器提供的设计器操作)
创建PropertyGrid控件
要使用VisualStudio.NET创建 PropertyGrid 控件,需要将该控件添加到工具箱中,因为默认情况下并不包含该控件。
在 Tools (工具)菜单中,选择 CustomizeToolbox (自定义工具箱)。
在对话框中选择FrameworkComponents (框架组件)选项卡,然后选择 PropertyGrid 。
如果您从命令行编译代码,请使用 /reference 选项并指定System.Windows.Forms.dll。
以下代码显示了如何创建 PropertyGrid 控件并将其添加到窗体中。
[c-sharp] viewplaincopy
1.using System;
2.using System.Drawing;
3.using System.ComponentModel;
4.using System.Windows.Forms;
5.using System.Globalization;
6.public class OptionsDialog :
System.Windows.Forms.Form
7.{
8. private System.Windows.Forms.PropertyGrid OptionsPropertyGrid;
9. public OptionsDialog()
10. {
11. OptionsPropertyGrid = new PropertyGrid();
12. OptionsPropertyGrid.Size = new Size(300, 250);
13. this.Controls.Add(OptionsPropertyGrid);
14. this.Text = "选项对话框";
15. }
16. [STAThread]
17. static void Main()
18. {
19. Application.Run(new OptionsDialog());
20. }
21.}
何处使用PropertyGrid控件
在应用程序中的很多地方,您都可以使用户与 PropertyGrid 进行交互,从而获得更丰富的编辑体验。
例如,某个应用程序包含多个用户可以设置的“设置”或选项,其中一些可能十分复杂。
您可以使用单选按钮、组合框或文本框来表示这些选项。
但本文将逐步介绍如何使用 PropertyGrid 控件创建选项窗口来设置应用程序选项。
上面所创建的 OptionsDialog 窗体即是选项窗口的开始。
现在,我们创建一个名为 AppSettings 的类,其中包含映射到应用程序设置的所有属性。
如果创建单独的类而不使用多个分散的变量,设置将更便于管理和维护。
[c-sharp] viewplaincopy
1.public class AppSettings{
2. private bool saveOnClose = true;
3. private string greetingText = "欢迎使用应用程序!
";
4. private int itemsInMRU = 4;
5. private int maxRepeatRate = 10;
6. private bool settingsChanged = false;
7. private string appVersion = "1.0";
8.
9. public bool SaveOnClose
10. {
11. get { return saveOnClose; }
12. set { saveOnClose = value;}
13. }
14. public string GreetingText
15. {
16. get { return greetingText; }
17. set { greetingText = value; }
18. }
19. public int MaxRepeatRate
20. {
21. get { return maxRepeatRate; }
22. set { maxRepeatRate = value; }
23. }
24. public int ItemsInMRUList
25. {
26. get { return itemsInMRU; }
27. set { itemsInMRU = value; }
28. }
29. public bool SettingsChanged
30. {
31. get { return settingsChanged; }
32. set { settingsChanged = value; }
33. }
34. public string AppVersion
35. {
36. get { return appVersion; }
37. set { appVersion = value; }
38. }
39.}
选项窗口上的 PropertyGrid 将使用此类,因此请将类定义添加到应用程序项目中,在添加时可创建新文件或将其添加到现有窗体源代码的下方。
选择对象
要标识 PropertyGrid 显示的内容,请将 PropertyGrid.SelectedObject 属性设置为一个对象实例。
然后,PropertyGrid 将完成其余的工作。
每次设置 SelectedObject 时,PropertyGrid 都会刷新显示的属性。
这提供了一种简单的方法来强制刷新属性,或在运行时切换对象。
您还可以调用 PropertyGrid.Refresh 方法来刷新属性。
接下来,您需要更新 OptionsDialog 构造函数中的代码,以创建一个 AppSettings 对象,并将其设置为PropertyGrid.SelectedObject 属性的值。
[c-sharp] viewplaincopy
1.public OptionsDialog()
2.{
3. OptionsPropertyGrid = new PropertyGrid();
4. OptionsPropertyGrid.Size = new Size(300, 250);
5. this.Controls.Add(OptionsPropertyGrid);
6. this.Text = "选项对话框";
7. // 创建 AppSettings 类并在 PropertyGrid 中显示该类。
8. AppSettings appset = new AppSettings();
9. OptionsPropertyGrid.SelectedObject = appset;
10.}
编译并运行该应用程序。
下面的屏幕快照显示了应用程序的外观。
图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 中的显示方式。
[c-sharp] viewplaincopy
1.[DefaultPropertyAttribute("SaveOnClose")]
2.public class AppSettings{
3. private bool saveOnClose = true;
4. private string greetingText = "欢迎使用应用程序!
";
5. private int maxRepeatRate = 10;
6. private int itemsInMRU = 4;
7. private bool settingsChanged = false;
8. private string appVersion = "1.0";
9. [CategoryAttribute("文档设置"),
10. DefaultValueAttribute(true)]
11. public bool SaveOnClose
12. {
13. get { return saveOnClose; }
14. set { saveOnClose = value;}
15. }
16. [CategoryAttribute("全局设置"),
17. ReadOnlyAttribute(true),
18. DefaultValueAttribute("欢迎使用应用程序!
")]
19. public string GreetingText
20. {
21. get { return greetingText; }
22. set { greetingText = value; }
23. }
24. [CategoryAttribute("全局设置"),
25. DefaultValueAttribute(4)]
26. public int ItemsInMRUList
27. {
28. get { return itemsInMRU; }
29. set { itemsInMRU = value; }
30. }
31. [DescriptionAttribute("以毫秒表示的文本重复率。
"),
32. CategoryAttribute("全局设置"),
33. DefaultValueAttribute(10)]
34. public int MaxRepeatRate
35. {
36. get { return maxRepeatRate; }
37. set { maxRepeatRate = value; }
38. }
39. [BrowsableAttribute(false),
40. DefaultValueAttribute(false)]
41. public bool SettingsChanged
42. {
43. get { return settingsChanged; }
44. set { settingsChanged = value; }
45. }
46. [CategoryAttribute("版本"),
47. DefaultValueAttribute("1.0"),
48. ReadOnlyAttribute(true)]
49. public string AppVersion
50. {
51. get { return appVersion; }
52. set { appVersion = value; }
53. }
54.}
将这些特性应用于 AppSettings 类后,编译并运行该应用程序。
下面的屏幕快照显示了应用程序的外观。
图3:
PropertyGrid中显示的带有类别和默认值的属性
使用此版本的选项窗口后,您会注意到以下几点:
∙显示窗口时,将首先突出显示 SaveOnClose 属性。
∙选中 MaxRepeatRate 属性时,说明帮助窗格中将显示“以毫秒表示的文本重复率”。
∙SaveOnClose 属性显示在“文档设置”类别下。
其他属性分别显示在“全局设置”和“版本”类别下。
∙SettingsChanged 属性将不再显示。
∙AppVersion 属性为只读。
只读属性以灰显文本显示。
∙如果 SaveOnClose 属性包含的值不是 true ,该值将以粗体显示。
PropertyGrid 使用粗体文本表示包含非默认值的属性。
显示复杂属性
到现在为止,选项窗口显示的都是简单的类型,如整数、布尔值和字符串。
那么,如何显示更复杂的类型呢?
如果应用程序需要跟踪窗口大小、文档字体或工具栏颜色等信息,该如何处理呢?
.NET框架提供的某些数据类型具有特殊的显示功能,能使这些类型在 PropertyGrid 中更具可用性。
对所提供类型的支持
首先,请更新 AppSettings 类,为窗口大小(Size类型)、窗口字体(Font类型)和工具栏颜色(Color类型)添加新属性。
[c-sharp] viewplaincopy
1.[DefaultPropertyAttribute("SaveOnClose")]
2.public class AppSettings{
3. private bool saveOnClose = true;
4. private string greetingText = "欢迎使用应用程序!
";
5. private int maxRepeatRate = 10;
6. private int itemsInMRU = 4;
7. private bool settingsChanged = false;
8. private string appVersion = "1.0";
9.
10. private Size windowSize = new Size(100,100);
11. private Font windowFont = new Font("宋体", 9, FontStyle.Regular);
12. private Color toolbarColor = SystemColors.Control;
13. [CategoryAttribute("文档设置"),
14. DefaultValueAttribute(true)]
15. public bool SaveOnClose
16. {
17. get { return saveOnClose; }
18. set { saveOnClose = value;}
19. }
20. [CategoryAttribute("文档设置")]
21. public Size WindowSize
22. {
23. get { return windowSize; }
24. set { windowSize = value;}
25. }
26. [CategoryAttribute("文档设置")]
27. public Font WindowFont
28. {
29. get {return windowFont; }
30. set { windowFont = value;}
31. }
32. [CategoryAttribute("全局设置")]
33. public Color ToolbarColor
34. {
35. get { return toolbarColor; }
36. set { toolbarColor = value; }
37. }
38. [CategoryAttribute("全局设置"),
39. ReadOnlyAttribute(true),
40. DefaultValueAttribute("欢迎使用应用程序!
")]
41. public string GreetingText
42. {
43. get { return greetingText; }
44. set { greetingText = value; }
45. }
46. [CategoryAttribute("全局设置"),
47. DefaultValueAttribute(4)]
48. public int ItemsInMRUList
49. {
50. get { return items
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# PropertyGrid控件应用心得 PropertyGrid 控件 应用 心得