关于资源文件(2)

来源:未知 责任编辑:责任编辑 发表时间:2014-04-20 03:40 点击:


[VB.NET]
For Each item In asm.GetManifestResourceNames()
    MessageBox.Show(item.ToString())
Next

2)使用Resource.resx文件。默认在Properties文件夹下边就有这样一个和项目同时生成的资源文件。当然你可以通过右键点击项目,然后在弹出的“添加新项……”对话框中人为添加一个资源——注意!此时的资源仅仅是被添加到了资源文件中,并不是到exe或者dll自身,只有在编译之后才会进入exe或者dll中。
如果我们细心的话,还会发现这种方式添加资源文件,其中有个属性“Persistance”有两个选择:
i)Link when compiling(编译时链接)。
ii)直接嵌入resx文件。
有何区别呢?
第i种情况:编译时,先根据Resources.resx(本身是一个xml文件)读取该资源的相对路径,然后根据该路径找到对应的文件(应该默认是会自动生成Resources文件夹,其中存放了若干资源文件),然后把它们转化成二进制形式,被一同编译进入了exe中。这就意味着如果另外一个项目要使用这个Resource文件,因为Resource中只存储了一个相对地址(你不把这个相对地址指向的资源文件(文件夹)拷贝过来,仅是拷贝一个资源文件,在编译的时候因为无法找到真正对应的图片,可能导致编译错误)。
至于第ii种,直接把资源文件转化为二进制代码流嵌入到exe和Resources中。因为Resource中直接嵌入了图片元数据,因此无需真正图片了,以后如果要资源复用,只要拷贝这个Resource文件加入其它项目,然后编译引用即可。www.2cto.com
那么如何读取Resources.resx中的资源文件呢?用第一种办法是不行的,我们要借助ResourceManager这个类:这个类构造函数有两个版本的重载:
i)需要一个type(注意:指定的是Resources.resx这个资源文件自动生成的类,Resources.designer.cs)。
ii)需要一个string(注意:指定的是项目的Namespace根名称.[文件夹名1.……文件夹名N].Resouce文件名称,当前Assembly)。
【例子2】
已知创建了一个项目,其中架构图如下:
 
现在要求读取Resource文件中嵌入的图片文件(假设是Desert.jpg,Embeded in resx形式)。
[C#]
ResourceManager rm = new ResourceManager(typeof(Resources.Resources));
//也可以:
//ResourceManager rm = new ResourceManager("WinFormCSharp.Resources.Resources",Assembly.GetExecutingAssembly());
BackgroundImage = (Bitmap)rm.GetObject("Desert");

[VB.NET]
Dim rm As New ResourceManager(GetType(Resources.Resources))
'也可以:
'ResourceManager rm = new ResourceManager("WinFormCSharp.Resources.Resources",Assembly.GetExecutingAssembly());
BackgroundImage = DirectCast(rm.GetObject("Desert"), Bitmap)

另外,更为简化的方式是使用ComponentResourceManager,只需指定一个Resouce文件的类名即可:
[C#]
ComponentResourceManager rm = new ComponentResourceManager(typeof(Resources.Resources));
BackgroundImage = (Bitmap)rm.GetObject("Desert");

[VB.NET]
Dim rm As New ComponentResourceManager(GetType(Resources.Resources))
BackgroundImage = DirectCast(rm.GetObject("Desert"), Bitmap)

或许你会说——哎呀!那么多类命名空间什么的,头都大了——没有关系,其实我之所以先说这些内容,主要是让我们对Resouces有一个清楚的了解。微软早已经考虑这点了!因此最最简便的方法在于——直接
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 浅析.NET下XML数据访问新机制
  • asp.net 面试+笔试题目第1/2页
  • C# 邮件地址是否合法的验证
  • C#高级编程:数据库连接[1]
  • asp.net 设置GridView的选中行的实现代码
  • 经典C++程序1
  • IIS 自动回收导致后台定时器失效的问题解决
  • ASP.NET GridView列表代码示例
  • 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transforma
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1