C# 资源文件(二)
(2009-08-12 14:56:49)
在新建的Windows项目中,一般自动生成两个资源文件:Form1.resx和Resources.resx。其中,Form1.resx在项目的根文件夹下,Resources.resx在Properties子文件夹下。这两个资源文件的使用方法是不一样的,因为对Form1.resx的访问需要构造Syste.Resources.ResourceManager对象,而访问Resources.resx里的资源可以直接使用Properties.Resources.resName(resName是你添加的资源的名称)。
访问Form1.resx
ResourceManager rm = new ResourceManager(typeof(Form1));//创建ResourceManager对象
string stringResource =
rm.GetString("resName"); //根据资源的名称获取字符串资源
Image imageResource = (Image)rm.GetObject("resName");//根据资源名称获取资源,并转型
在Form1.Designer.cs窗体设计器生成的代码中,可以看到这样的代码:
//只有向窗体上添加图标、图像等资源后,才会自动生成下面的代码。
ComponentResourceManager resources
= new ComponentResourceManager(typeof(Form1));
this.Icon =
((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
从代码可以看出,c#将窗体的图标文件作为资源进行保存了起来,然后利用ComponentResourceManager来获取这些资源。它和ResourceManager用法一样,System.ComponentModel.ComponentResourceManager继承自Syste.Resources.ResourceManager。
访问Resources.resx
Resources.resx文件位于Properties子文件夹下,在此文件夹中还存在一个Resources.Designer.cs文件,该文件中的代码都是由设计器自动生成的:
namespace
RootNameSpace.Properties {
......
internal class Resources {
private static
global::System.Resources.ResourceManager resourceMan;
private static
global::System.Globalization.CultureInfo resourceCulture;
//返回此类使用的缓存 ResourceManager
实例。
internal static
global::System.Resources.ResourceManager ResourceManager
{
get {
if (object.ReferenceEquals(resourceMan,
null)) {
global::System.Resources.ResourceManager
temp = new
global::System.Resources.ResourceManager("RootNameSpace.Properties.Resources",
typeof(Resources).Assembly);
resourceMan = temp;
}
return
resourceMan;
}
}
//添加的资源将以属性的形式返回
internal static
System.Drawing.Bitmap
resName {
get {
object obj =
ResourceManager.GetObject("resName", resourceCulture);
return
((System.Drawing.Bitmap)(obj));
}
}
......
}
}