.NET中有各种资源,例如嵌入的资源,本地资源,以及存在于.resx文件中的资源,如何应用它们?它们之间有什么区别?本文试图通过一个简单的例子对它们进行解释,希望对你有所帮助。
在本文中我通过一个简单的例子展示如何设置和使用它们,此程序可以在这里下载。运行后的界面如图1所示:
图1 程序主界面
1. 嵌入的资源(以Excel.png为例)
添加方法:将文件的BuildAction属性设置为Embedded Resource,如图2所示。
图2 嵌入的资源
访问方法:
Assembly.GetExecutingAssembly().GetManifestResourceStream("DotNetResourceDemo.Resources.excel.png");其中Resources为此资源所在的目录名字。
在程序集中的存在方式:Reflector是我最喜欢的工具之一,让我们利用它来分析一下我们的可执行文件吧。可以看到嵌入的资源直接位于Resources文件夹下面,如图3所示。
图3 嵌入的资源在Reflector中的表现方式
2. 本地资源(以go.gif为例)
添加方法:以PictureBox为例,在设计器中,单击PictureBox右上角的智能标记,选择Choose Image,弹出图4所示的对话框,依次单击|Local Resource|Import,然后选中你希望的资源即可。
图4 添加本地资源
访问方法:在*.designer.cs文件中使用
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
this.pbLocal.Image = ((System.Drawing.Image)(resources.GetObject("pbLocal.Image")));
注意,如果使能了窗体本地化,那么使用语句resources.ApplyResources(this.pbLocal, "pbLocal");应用资源。在这里我们有必要对这个方法的功能说明一下。ApplyResources尝试通过objectName.PropertyName格式的键查找资源,如果我们使用Reflector查看生成的可执行文件,那么会发现pbLocal所对应的资源,如下图所示,此方法应该会对pbLocal对象应用所有属性,包括Image、Location等等。
在程序集中的存在方式:单击图3中的DotNetResourceDemo.MainForm.resources,在右侧的反汇编窗口(如图5所示)中可以看出它是以Name/Value的形式存在的。
图5 本地资源在Reflector中的存在方式
3. Resx文件中的资源(以FreeBSD为例)
添加方法:双击Resources.resx文件,然后单击”Add Resource”即可。
图6 在.resx文件中添加资源
访问方式:this.Icon = DotNetResourceDemo.Properties.Resources.FreeBSD;
在程序集中的存在方式:在DotNetResourceDemo.Properties.Resources.resources中。
注意:你也添加一个.resx文件,而且一般很有必要这样做。在这个resx文件中,一般保存着一些字符串资源。另外,一般为每一个程序集创建一个.resx资源文件。
在程序集中的存在方式:存在于图3的DotNetResourceDemo.Properties.Resources.resources中。
后记:
源代码下载地址:http://download.csdn.net/source/837536
CSDN的博客图片怎么每次添加第二个图片的时候就出错呢?以后再添加吧。