@chanvee
2014-06-12T20:53:44.000000Z
字数 3988
阅读 3467
C#
由于老板接了一个项目,需要基于C#进行编写完成,所以通过近一个月的了解和摸索,算是初识了C#这门语言。这个项目是做一个信息化的辅助集成平台----集成包括ASN1C编译(数据帧类),IDL编译(接口类),XSD/XML转化及验证,数据库模块映射(数据库类);也就是把大部分开源的一些模块映射(编译器)集成到一起。目前为止这个项目中我的主要工作包括:编写测试该平台的property属性窗口,ASN1C编译器源码的汉化以及为整个平台提供solution解决方案。
因为这个项目想要建立的平台与VS的平台有些类似,所以VS中的属性窗口就是其中要实现的之一。所谓属性窗口就是当你点击某一个项目或文件等等之类的东西时,它会显示它的一些属性,比如文件名称,路径等等。C#的属性窗口也是其控件的一种,也是拖过C#的toolbox来添加的,只不过它的添加稍微复杂一点:首先右键toolbox
,在弹出的菜单中选择添加/移除项
, 在弹出的窗口中,选择.NET Freamwork components
窗口,再选择其中的property grid控件
,点击选择就可以加入这个控件了。
因为属性窗口中的属性是全局的,所以我们需要将各个属性设为public,这就要用到get和set的方法(如果不设置get方法,则要显示的属性不会显示在属性控件中)。为了设置相关的属性,必须设置下面的一些关于属性控件的属性值,如下表所示:
属性值 | 含义 |
---|---|
CategoryAttribute | 该属性对在Property控件中的属性按字母顺序进行归类 |
DescriptionAttribute | 其值为对每个属性的具体文字描述,将会显示在property控件的底部 |
BrowsableAttribute | 该值为是否在property控件中显示或者隐藏某个属性 |
ReadOnlyAttribute | 该值为某个属性值是否在property控件中只读 | |
DefaultValueAttribute | 每个属性的默认值 |
接下来我们需要创建一个类来建立属性,首先引入命名空间:
using System.ComponentModel;
然后再创建类:
public class Properties
{
private string _folderName;
private string _folderCreateTime;
private string _folderLastAccessTime;
private string _folderLastWriteTime;
private string _foldersize;
private int _filenum;
private string _folderpath;
private string _filename;
private string _filepath;
private string _filetype;
private string _filesize;
private string _fileCreateTime;
private string _fileLastAccessTime;
private string _fileLastWriteTime;
[CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹名")]
public string 文件夹名
{
get
{
return _folderName;
}
set
{
_folderName = value;
}
}
[CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹存放路径")]
public string 路径
{
get
{
return _folderpath;
}
set
{
_folderpath = value;
}
}
[CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹大小,当前选择文件夹或文件所在文件夹的大小")]
public string 文件夹大小
{
get { return _foldersize; }
set { _foldersize = value; }
}
[CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹创建时间")]
public string 创建时间
{
get { return _folderCreateTime; }
set { _folderCreateTime = value; }
}
[CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹最后修改时间")]
public string 修改时间
{
get { return _folderLastWriteTime; }
set { _folderLastWriteTime = value; }
}
[CategoryAttribute("文件夹信息"), DescriptionAttribute("文件夹最后访问时间")]
public string 访问时间
{
get { return _folderLastAccessTime; }
set { _folderLastAccessTime = value; }
}
[CategoryAttribute("文件夹信息"), DescriptionAttribute("文件个数,当前选择文件夹下的文件个数")]
public int 文件个数
{
get { return _filenum; }
set { _filenum = value; }
}
[CategoryAttribute("文件信息"), DescriptionAttribute("文件名")]
public string 文件名
{
get
{
return _filename;
}
set
{
_filename = value;
}
}
[CategoryAttribute("文件信息"), DescriptionAttribute("文件存放路径")]
public string 文件路径
{
get
{
return _filepath;
}
set
{
_filepath = value;
}
}
[CategoryAttribute("文件信息"), DescriptionAttribute("文件创建时间")]
public string 文件创建时间
{
get { return _fileCreateTime; }
set { _fileCreateTime = value; }
}
[CategoryAttribute("文件信息"), DescriptionAttribute("文件最后修改时间")]
public string 文件修改时间
{
get { return _fileLastWriteTime; }
set { _fileLastWriteTime = value; }
}
[CategoryAttribute("文件信息"), DescriptionAttribute("文件最后访问时间")]
public string 文件访问时间
{
get { return _fileLastAccessTime; }
set { _fileLastAccessTime = value; }
}
[CategoryAttribute("文件信息"), DescriptionAttribute("文件类型,当前选择文件的类型")]
public string 文件类型
{
get { return _filetype; }
set { _filetype = value; }
}
[CategoryAttribute("文件信息"), DescriptionAttribute("文件大小,当前选择文件的大小")]
public string 文件大小
{
get { return _filesize; }
set { _filesize = value; }
}
public Properties() { }
}
对上面代码的解释:
CategoryAttribute("文件信息")
表示把所有标注为文件信息的属性归为一类,在本例中就是把文件名、文件存放路径、文件创建时间、文件修改时间、文件访问时间、文件类型、文件大小归为到文件信息
这一类中。DescriptionAttribute("文件大小,当前选择文件的大小")
等就是对这些属性简短描述。public string xxxx
表示的就是你要显示的属性的Text(不知道该怎么说好,见开头的图可能比较好理解)。public Properties() { }
建立类的构造函数。当我们创建完这些属性后,我们就可以给这些属性赋值然后来显示它们了,由于篇幅的限制,这里就举一个简单地例子:
private void Form1_Load(object sender, System.EventArgs e)
{
//实例化一个Properties类
Properties property = new Properties();
//赋值给属性
property.路径 = "C:\\user\\Desktop";
property.文件夹名 = "test";
...
//将对象绑定到property控件中
propertyGrid.SelectedObject = property;
}
以上代码的解释:
1. 首先实例化一个Properties类,然后通过实例化的property
对其赋值,依上代码类推。
2. 将赋好值的property对象绑定到控件中,这样才能在控件中显示出来。
只是对属性窗口的一点简单介绍,当然其还有其他的一些进阶功能,这里就不再赘述了。
点击Markdown原稿.