C#创建和使用资源文件

创建资源文件

    资源文件顾名思义就是存放资源的文件。资源文件在程序设计中有着自身独特的优势,他独立于源程序,这样资源文件就可以被多个程序使用。同时在程序设计的时候,有时出于安全或者其他方面因素的考虑,把重要东西存放在资源文件中,也可以达到保密、安全的效果。那么Visual C#所使用的资源文件中到底存放哪些东西呢?在用Visual C#创建资源文件大致可以存放三种类型的数据资源,分别是字节数组、各种对象和字符串。本文将结合一个程序例子来具体说明用Visual C#是如何创建资源文件的。

一.用Visual C#在创建资源文件用到的一些概念和理论: 
在.Net FrameWork SDK中的一个名字叫System.Resources名称空间,在此名称空间中为应用程序提供了许多创建、存储和使用资源文件的类和接口。其中有一个类叫ResourceWriter,Visual C#就是通过调用这个类来实现创建、存储资源文件的。

二.Visual C#如何创建资源文件: 
首先要继承一个ResourceWriter类,然后调用ResourceWriter类的一个方法Generate ( ),就可以产生一个资源文件了。具体语句如下:

ResourceWriter rw = new ResourceWriter ( "My.resources" ) ;
rw.Generate ( ) ;

此时在磁盘的中就会产生一个名称为"My.resources"的资源文件,但此时的资源文件没有任何内容,下面我们就来看看如何往资源文件中添加资源。

三.在资源文件中添加资源: 
在ResourceWriter类中提供了一个AddResource ( )方法,这个方法的作用就是往资源文件中添加资源的。在Visual C#中对不同的资源有着不同的加入方式。

(1).加入字节数组,语法格式为:

public void AddResource ( string , byte [ ] ) ;

注释:其中string是在使用资源文件的时候,此字节数组在程序中的的唯一标识符

(2).加入对象,语法格式为:

public void AddResource ( string , object );

注释:其中string是在使用资源文件的时候,此对象在程序中的唯一标识符

在本文程序中,我们利用这种调用方式来加入图标和图象,具体如下:

Icon ico = new Icon ( "Demo.ico" ) ;
Image canceloff = Image.FromFile ("cancel-off.png") ;
Image cancelon = Image.FromFile ( "cancel-on.png" ) ;
Image cancelover = Image.FromFile ( "cancel-over.png" ) ;
Image okdown = Image.FromFile ( "ok-down.png" ) ;
Image okoff = Image.FromFile ( "ok-off.png" ) ;
Image okon = Image.FromFile ( "ok-on.png" ) ;

rw.AddResource ( "demo.ico" , ico ) ;//在资源文件中加入图标
//以下是在资源文件中加入图象
rw.AddResource ( "cancel-off.png" , canceloff ) ;
rw.AddResource ( "cancel-on.png" , cancelon ) ;
rw.AddResource ( "cancel-over.png" , cancelover ) ;
rw.AddResource ( "ok-down.png" , okdown ) ;
rw.AddResource ( "ok-off.png" , okoff ) ;
rw.AddResource ( "ok-on.png" , okon ) ;

(3).加入字符串,具体语法如下:

public void AddResource ( string1 , string2) ;

注释:其中string1是在使用资源文件的时候,此字符串在程序中的唯一标识符在本文的程序中,是如此使用的:

rw.AddResource ( "MyStr" , "从资源文件中读取字符串!" );

至此我们已经创建了一个资源文件,并且在资源文件中加入了若干个资源,当然在这之后,还应该注意,保存此资源文件,并关闭资源文件,具体如下:

rw.Close ( ) ;

四.创建资源文件的源程序代码: 
通过上面的论述,我们不难理解下面这些代码。下列程序代码的作用就是,创建一个名称为"My.resources"资源文件,并且在此资源文件中加入一个图标资源,若干个图象资源,和一个字符串资源。具体代码如下:

CreatResources.cs:
using System ;
using System.Drawing ;
using System.Resources ;

class CreatResource
{
public static void Main ( )
{
ResourceWriter rw = new ResourceWriter ( "My.resources" ) ;
Icon ico = new Icon ( "Demo.ico" ) ;

Image canceloff = Image.FromFile ("cancel-off.png") ;
Image cancelon = Image.FromFile ( "cancel-on.png" ) ;
Image cancelover = Image.FromFile ( "cancel-over.png" ) ;
Image okdown = Image.FromFile ( "ok-down.png" ) ;
Image okoff = Image.FromFile ( "ok-off.png" ) ;
Image okon = Image.FromFile ( "ok-on.png" ) ;

rw.AddResource ( "demo.ico" , ico ) ;

rw.AddResource ( "cancel-off.png" , canceloff ) ;
rw.AddResource ( "cancel-on.png" , cancelon ) ;
rw.AddResource ( "cancel-over.png" , cancelover ) ;
rw.AddResource ( "ok-down.png" , okdown ) ;
rw.AddResource ( "ok-off.png" , okoff ) ;
rw.AddResource ( "ok-on.png" , okon ) ;

rw.AddResource ( "MyStr" , "从资源文件中读取字符串!" ) ;
rw.Generate ( ) ;
rw.Close ( ) ;
}
}

最好还要提醒一下,在成功编译成执行文件后,在执行此文件的时候,必须保证在此执行文件的相同目录,存在上面代码中提到名称的图标和图象,否则在创建资源文件的时候是会出错的。

五.总结: 
可见用Visual C#创建资源文件并不是一个复杂的过程,在下一篇文章中,我们将介绍如何在Visual C#使用资源文件中资源。这才是Visual C#资源文件编程的重点和难点。当然文中所使用的资源文件就是以本文中创建的资源文件。

使用资源文件

    在《Visual C#资源文件编程--创建资源文件》中已经介绍了如何用Visual C#创建资源文件。本文将接着上篇文章的话题来探讨资源文件另外一个问题,在Visual C#如何使用资源文件。在上一篇文章中,我们已经成功的创建了一个名称为"My.resources"的资源文件。这个资源文件中包含有一个图标资源,在文件中的名称为"demo.ico",若干个图片资源和一个字符串资源,在文件中的名称为"MyStr"。我们将以上一篇文章创建的此资源文件为对象,结合一个具体的程序例子来看一下用Visual C#如何使用资源文件。
一.本文程序设计和运行的软件环境: 
(1).微软公司视窗2000服务器版

(2)..Net FrameWork SDK Beta 2

二.程序设计中的一些概念和理论: 
程序设计时涉及到的概念和理论主要是二种变量的相互转换。这就是二种变量就是所谓的实值类型变量(Value Type Variable)和参考类型变量(Reference Type Variable)。而二者之间的相互转换,在Visual C#中被称为装箱(Boxing)和出箱(Unboxing)。所谓装箱就是把实值类型变量转换成参考类型变量的过程,反之就是出箱。那么什么类型的变量是参考类型的变量,什么类型的变量又是实值类型变量呢?这二者之间有什么区别么?在Visual C#中的参考类型就是泛指这些类型,如:Object、Class、Interface、Delegate、String、Array等。这些类型定义的变量就是参考类型变量。而实值类型就是平常的平常使用的整型、布尔型、枚举型等,由这些类型定义的变量就是实值类型变量。他们之间的最大区别是参考类型变量是指向实体对象的指针,而实值类型变量就是实在的实体对象。由于装箱和出箱是一个概念性很强的操作过程,详细介绍需要很大的篇幅。而这超出了本文探讨的主要范畴。所以本文只介绍和程序相关的操作即出箱。具体的操作步骤,将在下一届结合程序来介绍。

三.程序设计的思路已经重要步骤的解决方法: 
(1).如何在程序编译的时候中嵌入资源。资源文件和程序是二个独立的文件,要把资源文件嵌入到最后生成的程序中,需要在编译的时候加上"/resource"命令,这个命令可以简写为"/res"。在本文中程序的名称为"use.cs",资源文件的名称为"My.resources",则把资源嵌入程序的编译命令如下:

Csc.exe /res:My.resources use.cs

(2).如何在程序管理资源文件中的资源:

在.Net FrameWork SDK这提供了一个关于资源文件创建和使用的名称空间--System.Resources。在这个名称空间中有一个Class为ResourceManager,这个Class的主要作用就是管理并使用资源文件。Visual C#是通过这个类来管理并使用嵌入程序中的资源文件中的资源。下列代码就是定义一个ResourceManager类来管理嵌入程序资源文件中的资源:

ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;

(3).如何在程序中使用资源文件中的资源:

在上一篇文章中,我们已经了解到在创建资源文件的时候,使用了AddResource ( )方法来加入资源,他的语法中的第一个参数是用户可以定义的字符串,这个字符串就是资源在资源文件的唯一标识,在程序设计中,就是通过这个唯一标识符来使用某个资源的。那么如何在程序中通过这个标识符来得到所需资源?这就要使用到ResourceManager类中的GetObject()和GetString()方法。这二个方法作用是获得指定的资源。下面是这二个方法的语法:

object GetSting(String)
object GetObject(String)

其中的"String"就是资源在资源文件中的那个唯一标识符。细心的读者可能已经注意到,这二个方法的返回值都是一个Object类型的变量,也就是一个参考类型的变量,而在程序中的字符串或者图象等,是一个实值类型变量。这就需要进行转换,而这种转换就是上面所说的装箱和出箱。下列代码是从资源文件中提取字符串、图象和图标资源:

提取字符串资源:

String s = ( ( String ) rm.GetString ( "MyStr" ) ) ;

提取图标资源:

Icon icoDemo = ( ( Icon ) rm.GetObject ( "demo.ico" ) ) ;

提取图象资源:

Image a = ( ( Image ) ( rm.GetObject ( "ok-off.png" ) ) ) ;

四.结合一个程序例子来看一下,资源文件的具体使用方法: 
下面的程序例子所使用的资源文件是上一篇文章中创建的资源文件"My.resources",程序中定义了三个Lable组件,其中的二个的作用是显示资源文件中图象资源,另外一个的作用是显示资源文件中字符串资源,程序的图标是取自资源文件中的图标资源。下面是程序的源代码:

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows.Forms ;
using System.Data ;
using System.Resources ;
using System.Reflection ;
public class Form1 : Form
{
private Label lblOK ;
private Label lblCancel ;
private System.ComponentModel.Container components = null ;
private Label lblResource ;
public Form1 ( )
{
//初始化窗体中的组件
InitializeComponent ( ) ;
}
//清除程序中使用过的资源
protected override void Dispose ( bool disposing )
{
if ( disposing )
{
if ( components != null )
{
components.Dispose ( ) ;
}
}
base.Dispose ( disposing ) ;
}
private void InitializeComponent ( )
{
ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
this.lblOK = new Label ( ) ;
this.lblCancel = new Label ( ) ;
this.lblResource = new Label ( ) ;
this.SuspendLayout ( ) ;

this.lblOK.BackColor = System.Drawing.Color.White ;
//使用资源文件中的图象资源
this.lblOK.Image = ( ( Image ) ( rm.GetObject ( "ok-off.png" ) ) ) ;
this.lblOK.Location = new System.Drawing.Point ( 24 , 40 ) ;
this.lblOK.Name = "lblOK" ;
this.lblOK.Size = new System.Drawing.Size ( 75 , 23 ) ;
this.lblOK.TabIndex = 0 ;
this.lblOK.Click += new System.EventHandler ( this.lblOK_Click ) ;
this.lblOK.MouseEnter += new System.EventHandler ( this.lblOK_MouseEnter ) ;
this.lblOK.MouseLeave += new System.EventHandler ( this.lblOK_MouseLeave ) ;
//出箱
//使用资源文件中的图象资源
this.lblCancel.Image = ( ( Image ) ( rm.GetObject ( "cancel-off.png" ) ) ) ;
this.lblCancel.Location = new System.Drawing.Point ( 152 , 40 ) ;
this.lblCancel.Name = "lblCancel" ;
this.lblCancel.Size = new System.Drawing.Size ( 75 , 23 ) ;
this.lblCancel.TabIndex = 1 ;
this.lblCancel.Click += new System.EventHandler ( this.lblCancel_Click ) ;
this.lblCancel.MouseEnter += new System.EventHandler ( this.lblCancel_MouseEnter ) ;
this.lblCancel.MouseLeave += new System.EventHandler ( this.lblCancel_MouseLeave ) ;

this.lblResource.Location = new System.Drawing.Point ( 88 , 8 ) ;
this.lblResource.Name = "lblResource" ;
this.lblResource.TabIndex = 2 ;
//出箱
//使用资源文件中的字符串资源
this.lblResource.Text = ( ( String ) rm.GetString ( "MyStr" ) ) ;

this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;
this.ClientSize = new System.Drawing.Size ( 240 , 101 ) ;
this.Controls.Add ( lblResource ) ;
this.Controls.Add ( lblCancel ) ;
this.Controls.Add ( lblOK ) ;
//出箱
//使用资源文件中的图标资源
Icon icoDemo = ( ( Icon ) rm.GetObject ( "demo.ico" ) ) ;
this.Icon = icoDemo ;
this.Name = "Form1" ;
this.Text = "Visual C#中使用资源文件!" ;
this.ResumeLayout ( false ) ;

}
static void Main ( )
{
Application.Run ( new Form1 ( ) ) ;
}
private void lblOK_MouseEnter ( object sender , System.EventArgs e )
{
ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
this.lblOK.Image = ( ( Image ) ( rm.GetObject ( "ok-on.png" ) ) ) ;
}

private void lblOK_MouseLeave ( object sender , System.EventArgs e )
{
ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
this.lblOK.Image = ( ( Image ) ( rm.GetObject ( "ok-off.png" ) ) ) ;
}

private void lblOK_Click ( object sender, System.EventArgs e )
{
ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
this.lblOK.Image = ( ( Image ) ( rm.GetObject ( "ok-down.png" ) ) ) ;
}

private void lblCancel_MouseEnter ( object sender , System.EventArgs e )
{
ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
this.lblCancel.Image = ( ( Image ) ( rm.GetObject ( "cancel-onr.png" ) ) ) ;
}

private void lblCancel_MouseLeave ( object sender , System.EventArgs e )
{
ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
this.lblCancel.Image = ( ( Image ) ( rm.GetObject ( "cancel-off.png" ) ) ) ;
}

private void lblCancel_Click(object sender, System.EventArgs e)
{
ResourceManager rm = new ResourceManager ( "Images" , Assembly.GetExecutingAssembly ( ) ) ;
this.lblCancel.Image = ( ( Image ) ( rm.GetObject ( "cancel-over.png" ) ) ) ;
}
}

五.总结: 
至此我们已经完成了在Visual C#资源文件方面编程的全部内容,其中的主要内容就是创建资源文件和使用资源文件二大方面,我想通过这二篇文章的介绍,你对资源文件应该有了一个比较全面的认识了吧!

时间: 2024-10-12 08:16:54

C#创建和使用资源文件的相关文章

delphi 10.2 创建并使用资源文件(一共22种格式,RCDATA是自定义格式)

windows支持以下资源格式: 1 2 //下面是 Windows 支持的资源格式: RT_CURSOR = MakeIntResource(1); RT_BITMAP = MakeIntResource(2); RT_ICON = MakeIntResource(3); RT_MENU = MakeIntResource(4); RT_DIALOG = MakeIntResource(5); RT_STRING = MakeIntResource(6); RT_FONTDIR = MakeI

C#创建资源文件

资源文件顾名思义就是存放资源的文件.资源文件在程序设计中有着自身独特的优势,他独立于源程序,这样资源文件就可以被多个程序使用.同时在程序设计的时候,有时出于安全或者其他方面因素的考虑,把重要东西存放在资源文件中,也可以达到保密.安全的效果.那么Visual C#所使用的资源文件中到底存放哪些东西呢?在用Visual C#创建资源文件大致可以存放三种类型的数据资源,分别是字节数组.各种对象和字符串.本文将结合一个程序例子来具体说明用Visual C#是如何创建资源文件的. 一.用Visual C#

小谈——读取web资源文件的方式和路径问题

读取web资源文件的方式 a): 采用servletContext对象获得. 优点: 任意文件,任意路径都可获得 缺点: 必须在web环境下 // 拿到全局对象 ServletContext sc = this.getServletContext(); // 获取p1.properties文件的路径 String path = sc.getRealPath("/WEB-INF/classes/p1.properties"); b): 采用resourceBundle获得 优点: 非we

利用资源文件实现多语言(支持强类型)控制台、WEB端都可以使用

一.对于控制台应用程序: 1.新建一个资源文件,一个是默认的,一个是指定语言的,命名规范如下: 1.1.建一个Resources.resx文件(这个做为默认的) 1.2.再建一个指定语言的,例如为“英语 - 英国”语言添加一个资源文件,则需要命名为“Resources.en-GB.resx”,这样项目就有两个资源文件了. 2.可以设置当前线程的 Culture 和 UICulture 属性来设置为语言和区域性字符串,例如这里手动切换为en-GB语言,则在调用Resources.Hello时将会去

.NET资源文件实现多语言切换

1.创建对应的资源文件 lang.en.resx  英文 lang.resx   中文,默认 lang.zh-tw.resx  繁体 首先说明,这三个文件前面部分名称需要一样,只是 点 后面的语言代号不一样(en,空,zh-tw). 语言代号不要乱写,需要对应系统中对应的语言代号,下面会用到. 创建完成后,只有默认的那个,lang.resx 包含lang.Designer.cs 文件,当你先创建 lang.resx 后,再创建其他两个,不会再生成Designer.cs 文件了. 当你向资源文件中

Android资源文件之创建与访问

资料来源于官方api文档 Android资源文件之创建与访问 Android适配之创建别名资源 如果你想将某一资源用于多种设备配置(但是不想作为默认资源提供), 则无需将同一资源放入多个备用资源目录中.相反,可以(在某些情况下)创建备用资源,充当保存在默认资源目录下的资源的别名. 注: 并非所有资源都会提供相应的机制让你创建指向其他资源的别名.特别是, xml/目录中的动画资源.菜单资源.原始资源以及其他未指定的资源均不提供此功能. 例如,加入你有有一个应用图片icon.jpg, 并且需要不同区

Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件

写在前面 从大四实习至今已一年有余,作为一个程序员,一直没有用心去记录自己工作中遇到的问题,甚是惭愧,打算从今日起开始养成写博客的习惯.作为一名java开发人员,Spring是永远绕不过的话题,它的设计精巧,代码优美,值得每一名开发人员学习阅读. 在我最开始学习javaEE时,第一次接触Spring是从一个S(Struts)S(Spring)H(Herbinate)的框架开始.由java原生开发到框架开发转换过程中,那时我的印象里Struts负责控制层,herbinate负责数据层,而Sprin

.Net 多语言 与资源文件

目前很多网站都支持多语言,特别是中英文.而.Net网站中的多语言就要用到资源文件.资源文件分为全局资源文件(App_GlobalResource)以及本地资源文件(App_LocalResource). 创建资源文件 对于一个项目,我们一般都会创建全局资源文件以及本地资源文件.我们可以首先新建两个文件夹:App_GlobalResource,App_LocalResource. 1. 创建本地资源文件(App_LocalResource) 本地资源文件是针对于某个页面资源信息.所以,原则上我们应

iOS工程 与 资源文件 和 Bundle

在简单的app中,可能只会用到工程,但是项目越大,越复杂,就会需要拆分项目,将各个功能拆散到各个工程中. 可以使用worksapce来管理工程集合. 但是资源文件却不好管理,因为xcode默认只能添加自己工程内,或者子工程的资源文件到target中. 如果是平级的工程,怎么添加呢?可以使用bundle bundle虽然是os x中的资源类型,但是是兼容iOS的 我们可以先创建一个os x的bundle,然后修改其编译类型为iOS的 调整base sdk即可 然后添加资源文件(png,xib,st