[关闭]
@chanvee 2014-06-12T20:53:44.000000Z 字数 3988 阅读 3467

初识C#之属性窗口的建立及应用

C#


由于老板接了一个项目,需要基于C#进行编写完成,所以通过近一个月的了解和摸索,算是初识了C#这门语言。这个项目是做一个信息化的辅助集成平台----集成包括ASN1C编译(数据帧类),IDL编译(接口类),XSD/XML转化及验证,数据库模块映射(数据库类);也就是把大部分开源的一些模块映射(编译器)集成到一起。目前为止这个项目中我的主要工作包括:编写测试该平台的property属性窗口,ASN1C编译器源码的汉化以及为整个平台提供solution解决方案。

C# 属性窗口的添加


property属性窗口
因为这个项目想要建立的平台与VS的平台有些类似,所以VS中的属性窗口就是其中要实现的之一。所谓属性窗口就是当你点击某一个项目或文件等等之类的东西时,它会显示它的一些属性,比如文件名称,路径等等。C#的属性窗口也是其控件的一种,也是拖过C#的toolbox来添加的,只不过它的添加稍微复杂一点:首先右键toolbox,在弹出的菜单中选择添加/移除项, 在弹出的窗口中,选择.NET Freamwork components窗口,再选择其中的property grid控件,点击选择就可以加入这个控件了。

C# 属性窗口中属性的建立


因为属性窗口中的属性是全局的,所以我们需要将各个属性设为public,这就要用到get和set的方法(如果不设置get方法,则要显示的属性不会显示在属性控件中)。为了设置相关的属性,必须设置下面的一些关于属性控件的属性值,如下表所示:

属性值 含义
CategoryAttribute 该属性对在Property控件中的属性按字母顺序进行归类
DescriptionAttribute 其值为对每个属性的具体文字描述,将会显示在property控件的底部
BrowsableAttribute 该值为是否在property控件中显示或者隐藏某个属性
ReadOnlyAttribute 该值为某个属性值是否在property控件中只读 |
DefaultValueAttribute 每个属性的默认值

接下来我们需要创建一个类来建立属性,首先引入命名空间:

  1. using System.ComponentModel;

然后再创建类:

  1. public class Properties
  2. {
  3. private string _folderName;
  4. private string _folderCreateTime;
  5. private string _folderLastAccessTime;
  6. private string _folderLastWriteTime;
  7. private string _foldersize;
  8. private int _filenum;
  9. private string _folderpath;
  10. private string _filename;
  11. private string _filepath;
  12. private string _filetype;
  13. private string _filesize;
  14. private string _fileCreateTime;
  15. private string _fileLastAccessTime;
  16. private string _fileLastWriteTime;
  17. [CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹名")]
  18. public string 文件夹名
  19. {
  20. get
  21. {
  22. return _folderName;
  23. }
  24. set
  25. {
  26. _folderName = value;
  27. }
  28. }
  29. [CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹存放路径")]
  30. public string 路径
  31. {
  32. get
  33. {
  34. return _folderpath;
  35. }
  36. set
  37. {
  38. _folderpath = value;
  39. }
  40. }
  41. [CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹大小,当前选择文件夹或文件所在文件夹的大小")]
  42. public string 文件夹大小
  43. {
  44. get { return _foldersize; }
  45. set { _foldersize = value; }
  46. }
  47. [CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹创建时间")]
  48. public string 创建时间
  49. {
  50. get { return _folderCreateTime; }
  51. set { _folderCreateTime = value; }
  52. }
  53. [CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹最后修改时间")]
  54. public string 修改时间
  55. {
  56. get { return _folderLastWriteTime; }
  57. set { _folderLastWriteTime = value; }
  58. }
  59. [CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹最后访问时间")]
  60. public string 访问时间
  61. {
  62. get { return _folderLastAccessTime; }
  63. set { _folderLastAccessTime = value; }
  64. }
  65. [CategoryAttribute("文件夹信息"), DescriptionAttribute("文件个数,当前选择文件夹下的文件个数")]
  66. public int 文件个数
  67. {
  68. get { return _filenum; }
  69. set { _filenum = value; }
  70. }
  71. [CategoryAttribute("文件信息"), DescriptionAttribute("文件名")]
  72. public string 文件名
  73. {
  74. get
  75. {
  76. return _filename;
  77. }
  78. set
  79. {
  80. _filename = value;
  81. }
  82. }
  83. [CategoryAttribute("文件信息"), DescriptionAttribute("文件存放路径")]
  84. public string 文件路径
  85. {
  86. get
  87. {
  88. return _filepath;
  89. }
  90. set
  91. {
  92. _filepath = value;
  93. }
  94. }
  95. [CategoryAttribute("文件信息"), DescriptionAttribute("文件创建时间")]
  96. public string 文件创建时间
  97. {
  98. get { return _fileCreateTime; }
  99. set { _fileCreateTime = value; }
  100. }
  101. [CategoryAttribute("文件信息"), DescriptionAttribute("文件最后修改时间")]
  102. public string 文件修改时间
  103. {
  104. get { return _fileLastWriteTime; }
  105. set { _fileLastWriteTime = value; }
  106. }
  107. [CategoryAttribute("文件信息"), DescriptionAttribute("文件最后访问时间")]
  108. public string 文件访问时间
  109. {
  110. get { return _fileLastAccessTime; }
  111. set { _fileLastAccessTime = value; }
  112. }
  113. [CategoryAttribute("文件信息"), DescriptionAttribute("文件类型,当前选择文件的类型")]
  114. public string 文件类型
  115. {
  116. get { return _filetype; }
  117. set { _filetype = value; }
  118. }
  119. [CategoryAttribute("文件信息"), DescriptionAttribute("文件大小,当前选择文件的大小")]
  120. public string 文件大小
  121. {
  122. get { return _filesize; }
  123. set { _filesize = value; }
  124. }
  125. public Properties() { }
  126. }

对上面代码的解释:

  1. 首先我们创建了一个名为Properties的类,而这个类是用来存储我们将要显示的各个属性,比如说文件名称,文件路径等。
  2. CategoryAttribute("文件信息")表示把所有标注为文件信息的属性归为一类,在本例中就是把文件名、文件存放路径、文件创建时间、文件修改时间、文件访问时间、文件类型、文件大小归为到文件信息这一类中。DescriptionAttribute("文件大小,当前选择文件的大小")等就是对这些属性简短描述。
  3. public string xxxx表示的就是你要显示的属性的Text(不知道该怎么说好,见开头的图可能比较好理解)。
  4. get和set方法是让其全局化。
  5. public Properties() { }建立类的构造函数。

C# 属性窗口中属性的赋值及显示


当我们创建完这些属性后,我们就可以给这些属性赋值然后来显示它们了,由于篇幅的限制,这里就举一个简单地例子:

  1. private void Form1_Load(object sender, System.EventArgs e)
  2. {
  3. //实例化一个Properties类
  4. Properties property = new Properties();
  5. //赋值给属性
  6. property.路径 = "C:\\user\\Desktop";
  7. property.文件夹名 = "test";
  8. ...
  9. //将对象绑定到property控件中
  10. propertyGrid.SelectedObject = property;
  11. }

以上代码的解释:
1. 首先实例化一个Properties类,然后通过实例化的property对其赋值,依上代码类推。
2. 将赋好值的property对象绑定到控件中,这样才能在控件中显示出来。

只是对属性窗口的一点简单介绍,当然其还有其他的一些进阶功能,这里就不再赘述了。

点击Markdown原稿.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注