




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C#使用Resources资源文件一、创建资源文件
可以将字符串、图像或对象数据等资源包含在资源文件中,方便应用程序使用。
创建资源文件的方法:
1、手动或使用IDE工具自动生成XML资源(.resx)文件。(推荐)
创建一个包含字符串、图像或对象数据的XML资源(.resx)文件。
使用VisualStudio创建一个资源文件并将其包含在项目中。
VisualStudio提供一个资源编辑器,借助该编辑器,可添加、删除和修改资源。编译时,资源文件会自动转换成二进制.resources文件,并嵌入应用程序程序集或附属程序集中。
注意:内部使用资源文件生成器(Resgen.exe)将文本文件转换成二进制资源(.resources)文件。然后使用语言编译器将这个二进制资源文件嵌入可执行应用程序或应用程序库,或者使用程序集链接器(Al.exe)将这个二进制资源文件嵌入附属程序集。
2、以编程方式创建一个XML资源(.resx)文件。使用ResXResourceWriter类
可以创建一个.resx文件、枚举其资源并按名称检索特定资源。
ResXResourceWriterrw=newResXResourceWriter("Demo.rex");
rw.AddResource("Logo",Image.FromFile("logo.jpg");
rw.AddResource("Title","Procec#");
rw.Generate();
rw.Close();
二、使用ResourceManager读取项目中资源文件
资源文件调用方法
(1).txt文件:不可以直接调用,得先将其转换成.resources文件才能使用。
(2).resx文件:可以用ResXResourceReader来做读取,但是这种方法不直观,不推荐直接调用.resx文件。正确的方法是将其转换成.resources文件,然后用ResourceManager作读取工作。
注意如果是在VS.NET中添加的.resx文件,那么它们自动被设为EmbeddedResource,转成.resources文件后被嵌入到Assembly中。
(3).resources文件分成两种情况:
1、被嵌入或编译成SatelliteAssembly:使用ResourceManager来获得在Assembly中的资源。2、单独文件,没被编译或嵌入到Assembly:使用ResourceManager.CreateFileBasedResourceManager来获得资源集(ResourceSet)。
在新建的Windows项目中,一般自动生成两个资源文件:Form1.resx和Resources.resx。其中,Form1.resx附属Form1窗体,Resources.resx在项目Properties子文件夹下。
下面我们看看读取项目中资源文件
1、强类型读取项目中resx资源文件。
1、创建一个项目的默认资源文件。
2、在项目Properties目录下,可以看到Resources.resx。
3、添加相关的资源。
4、可以看到系统自动生成的强类型类。
使用强类型可直接使用类
logo.Image=ZS.MouldManagement.Properties.Resources._0
不仅在Properties文件夹下可以建立资源文件,也可以在任何地方创建资源文件。在建立名称为MyResource资源文件的同时,设计器会自动生成两个文件:MyResource.resx和MyResource.Designer.cs。其中后一个文件就包装了设计器自动生成的代码,以方便对资源文件的强类型访问。
强类型访问代码:
ZS.MouldManagement.Mould._333
2、使用代码读取项目中不同文化的resx资源文件
ResourceManager可以根据不同的UICulture设置返回不同的本地资源,我们只需知道调用资源用到它就可以了。
Winform使用资源文件(ZS.MouldManagement.resx;ZS.MouldManagement.en-us.rex等等)
//多语言
Thread.CurrentThread.CurrentCulture=CultureInfo.CreateSpecificCulture("en-us");
Thread.CurrentThread.CurrentUICulture=newCultureInfo("en-us");
Assemblyasm=Assembly.GetExecutingAssembly();
ResourceManagerrm=newResourceManager("ZS.MouldManagement.Properties.Resources",asm);
//ZS.MouldManagement是你程序的命名空间,ZS.MouldManagement.Properties是资源类Resources的命名空间,资源文件名称不带扩展名
this.logo.Image=(Image)rm.GetObject("Logo");//Get**方法具有重载方法,第二个参数为CultureInfo对象
this.Title.Text=rm.GetString("Title");//资源文件名称不带扩展名
三、Windows项目中的窗体资源文件
因为对Form1.resx的访问需要构造Syste.Resources.ResourceManager对象,而访问Resources.resx里的资源可以直接使用Properties.Resources.resName(resName是你添加的资源的名称)。
只有向窗体上添加图标、图像等资源后
会在窗体设计器Form1.Designer.cs自动生成下面的代码
ComponentResourceManagerresources=newComponentResourceManager(typeof(Form1));//创建ResourceManager对象
this.Icon=((System.Drawing.Icon)(resources.GetObject("$this.Icon")));//根据资源的名称获取字符串资源
this.Item1.Image=global::ZS.MouldManagement.Properties.Resources._0;//访问项目中的资源
从代码可以看出,c#将窗体的图标文件作为资源进行保存了起来,然后利用ComponentResourceManager来获取这些资源。
它和ResourceManager用法一样,System.ComponentModel.ComponentResourceManager继承自Syste.Resources.ResourceManager。
使用ComponentResourceManager类进行界面多语言切换
Thread.CurrentThread.CurrentUICulture=newCultureInfo("zh-CN");
ComponentResourceManagerresources=newComponentResourceManager(typeof(Form1));
resources.ApplyResources(this,"$this");
AppLang(form,resources);
#regionAppLangforcontrol
///summary
///遍历窗体所有控件,针对其设置当前界面语言
////summary
///paramname="control"/param
///paramname="resources"/param
privatestaticvoidAppLang(Controlcontrol,System.ComponentModel.ComponentResourceManagerresources)
if(controlisMenuStrip)
resources.ApplyResources(control,control.Name);
MenuStripms=(MenuStrip)control;
if(ms.Items.Count0)
foreach(ToolStripMenuItemcinms.Items)
AppLang(c,resources);
foreach(Controlcincontrol.Controls)
resources.ApplyResources(c,c.Name);
AppLang(c,resources);
#endregion
#regionAppLangformenuitem
///summary
///遍历菜单
////summary
///paramname="item"/param
///paramname="resources"/param
privatestaticvoidAppLang(ToolStripMenuItemitem,System.ComponentModel.ComponentResourceManagerresources)
if(itemisToolStripMenuItem)
resources.ApplyResources(item,item.Name);
ToolStripMenuItemtsmi=(ToolStripMenuItem)item;
if(tsmi.DropDownItems.Count0)
foreach(ToolStripMenuItemcintsmi.DropDownItems)
AppLang(c,resources);
#endregion
四、使用Assembly.GetManifestResourceStream()从此程序集加载指定的文件。
当直接嵌入一资源时,也就是说,不通过一个资源文件而直接将一资源(比如图片)嵌入到Assembly中。这可以在VS.NET中通过设置一文件的Build属性为嵌入的资源实现。
在这种情况下ResourceManager就没有用了,因为它只能获取.resources资源文件。那么如何调用这类的资源呢?我们只要了解一些System.Reflection.Assembly这个类中的一些函数就可以了。
有三个相关函数,不过我们只需要Assembly.GetManifestResourceStream这个函数。这个函数将一嵌入到Assembly中的资源以stream的方式返回,而我们可以将这个stream转成在.NET中可用的对象。
比如,如果嵌入资源是一图片,那么我们可以利用newBitmap(Stream)这个构造方法获得这个图片资源的Bitmap对象。
1、将本地要加入的资源文本(视频,图片,文本或其它)加入项目。比如我们现在加入一个up.bmp的图片到项目中,且放在文件夹Resources下面,
2、将up.bmp右键选择属性的生成操作设置为嵌入的资源。
注意:访问资源的名称规则为:项目命名空间.资源文件所在文件夹名.资源文件名
Assemblyassm=Assembly.getGetExecutingAssembly();
Streamstream=assm.GetManifestResourceStream("CreateDatabase.Resources.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 初中音乐与其他学科融合教学的有效策略和实践路径
- 拔尖创新人才培养新路径与行动计划
- 运营直播面试题及答案
- 三方分红合同协议书
- 鱼船出租合同协议书
- 区域合伙合同协议书
- 合同就业协议书怎么填
- 会议咨询服务合同协议书
- 合同协议书为何最优先
- 餐饮协议书合同
- 老年人误吸的预防团体标准试题
- 17小猴子下山 第一课时 公开课一等奖创新教学设计
- 厨房人员消防安全知识培训
- 2024年广东省中山市教学共进联盟中考一模数学试题(含答案)
- 聚合工艺作业安全培训课件
- 2024年山东省公共卫生临床中心招聘笔试冲刺题含答案解析
- 电厂凝结水系统.课件
- 乳腺癌中医护理查房
- 2024年司法考试真题及答案
- 天车检验报告
- 口腔护士进修总结汇报
评论
0/150
提交评论