国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

C#創(chuàng)建和使用資源文件

2024-07-21 02:26:18
字體:
供稿:網(wǎng)友

創(chuàng)建資源文件

    資源文件顧名思義就是存放資源的文件。資源文件在程序設(shè)計(jì)中有著自身獨(dú)特的優(yōu)勢(shì),他獨(dú)立于源程序,這樣資源文件就可以被多個(gè)程序使用。同時(shí)在程序設(shè)計(jì)的時(shí)候,有時(shí)出于安全或者其他方面因素的考慮,把重要東西存放在資源文件中,也可以達(dá)到保密、安全的效果。那么visual c#所使用的資源文件中到底存放哪些東西呢?在用visual c#創(chuàng)建資源文件大致可以存放三種類型的數(shù)據(jù)資源,分別是字節(jié)數(shù)組、各種對(duì)象和字符串。本文將結(jié)合一個(gè)程序例子來具體說明用visual c#是如何創(chuàng)建資源文件的。

一.用visual c#在創(chuàng)建資源文件用到的一些概念和理論:
在.net framework sdk中的一個(gè)名字叫system.resources名稱空間,在此名稱空間中為應(yīng)用程序提供了許多創(chuàng)建、存儲(chǔ)和使用資源文件的類和接口。其中有一個(gè)類叫resourcewriter,visual c#就是通過調(diào)用這個(gè)類來實(shí)現(xiàn)創(chuàng)建、存儲(chǔ)資源文件的。

二.visual c#如何創(chuàng)建資源文件:
首先要繼承一個(gè)resourcewriter類,然后調(diào)用resourcewriter類的一個(gè)方法generate ( ),就可以產(chǎn)生一個(gè)資源文件了。具體語句如下:

resourcewriter rw = new resourcewriter ( "my.resources" ) ;
rw.generate ( ) ;

此時(shí)在磁盤的中就會(huì)產(chǎn)生一個(gè)名稱為"my.resources"的資源文件,但此時(shí)的資源文件沒有任何內(nèi)容,下面我們就來看看如何往資源文件中添加資源。

三.在資源文件中添加資源:
在resourcewriter類中提供了一個(gè)addresource ( )方法,這個(gè)方法的作用就是往資源文件中添加資源的。在visual c#中對(duì)不同的資源有著不同的加入方式。

(1).加入字節(jié)數(shù)組,語法格式為:

public void addresource ( string , byte [ ] ) ;

注釋:其中string是在使用資源文件的時(shí)候,此字節(jié)數(shù)組在程序中的的唯一標(biāo)識(shí)符

(2).加入對(duì)象,語法格式為:

public void addresource ( string , object );

注釋:其中string是在使用資源文件的時(shí)候,此對(duì)象在程序中的唯一標(biāo)識(shí)符

在本文程序中,我們利用這種調(diào)用方式來加入圖標(biāo)和圖象,具體如下:

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 ) ;//在資源文件中加入圖標(biāo)
//以下是在資源文件中加入圖象
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是在使用資源文件的時(shí)候,此字符串在程序中的唯一標(biāo)識(shí)符在本文的程序中,是如此使用的:

rw.addresource ( "mystr" , "從資源文件中讀取字符串!" );

至此我們已經(jīng)創(chuàng)建了一個(gè)資源文件,并且在資源文件中加入了若干個(gè)資源,當(dāng)然在這之后,還應(yīng)該注意,保存此資源文件,并關(guān)閉資源文件,具體如下:

rw.close ( ) ;

四.創(chuàng)建資源文件的源程序代碼:
通過上面的論述,我們不難理解下面這些代碼。下列程序代碼的作用就是,創(chuàng)建一個(gè)名稱為"my.resources"資源文件,并且在此資源文件中加入一個(gè)圖標(biāo)資源,若干個(gè)圖象資源,和一個(gè)字符串資源。具體代碼如下:

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 ( ) ;
}
}

最好還要提醒一下,在成功編譯成執(zhí)行文件后,在執(zhí)行此文件的時(shí)候,必須保證在此執(zhí)行文件的相同目錄,存在上面代碼中提到名稱的圖標(biāo)和圖象,否則在創(chuàng)建資源文件的時(shí)候是會(huì)出錯(cuò)的。

五.總結(jié):
可見用visual c#創(chuàng)建資源文件并不是一個(gè)復(fù)雜的過程,在下一篇文章中,我們將介紹如何在visual c#使用資源文件中資源。這才是visual c#資源文件編程的重點(diǎn)和難點(diǎn)。當(dāng)然文中所使用的資源文件就是以本文中創(chuàng)建的資源文件。

使用資源文件

    在《visual c#資源文件編程--創(chuàng)建資源文件》中已經(jīng)介紹了如何用visual c#創(chuàng)建資源文件。本文將接著上篇文章的話題來探討資源文件另外一個(gè)問題,在visual c#如何使用資源文件。在上一篇文章中,我們已經(jīng)成功的創(chuàng)建了一個(gè)名稱為"my.resources"的資源文件。這個(gè)資源文件中包含有一個(gè)圖標(biāo)資源,在文件中的名稱為"demo.ico",若干個(gè)圖片資源和一個(gè)字符串資源,在文件中的名稱為"mystr"。我們將以上一篇文章創(chuàng)建的此資源文件為對(duì)象,結(jié)合一個(gè)具體的程序例子來看一下用visual c#如何使用資源文件。
一.本文程序設(shè)計(jì)和運(yùn)行的軟件環(huán)境:
(1).微軟公司視窗2000服務(wù)器版

(2)..net framework sdk beta 2

二.程序設(shè)計(jì)中的一些概念和理論:
程序設(shè)計(jì)時(shí)涉及到的概念和理論主要是二種變量的相互轉(zhuǎn)換。這就是二種變量就是所謂的實(shí)值類型變量(value type variable)和參考類型變量(reference type variable)。而二者之間的相互轉(zhuǎn)換,在visual c#中被稱為裝箱(boxing)和出箱(unboxing)。所謂裝箱就是把實(shí)值類型變量轉(zhuǎn)換成參考類型變量的過程,反之就是出箱。那么什么類型的變量是參考類型的變量,什么類型的變量又是實(shí)值類型變量呢?這二者之間有什么區(qū)別么?在visual c#中的參考類型就是泛指這些類型,如:object、class、interface、delegate、string、array等。這些類型定義的變量就是參考類型變量。而實(shí)值類型就是平常的平常使用的整型、布爾型、枚舉型等,由這些類型定義的變量就是實(shí)值類型變量。他們之間的最大區(qū)別是參考類型變量是指向?qū)嶓w對(duì)象的指針,而實(shí)值類型變量就是實(shí)在的實(shí)體對(duì)象。由于裝箱和出箱是一個(gè)概念性很強(qiáng)的操作過程,詳細(xì)介紹需要很大的篇幅。而這超出了本文探討的主要范疇。所以本文只介紹和程序相關(guān)的操作即出箱。具體的操作步驟,將在下一屆結(jié)合程序來介紹。

三.程序設(shè)計(jì)的思路已經(jīng)重要步驟的解決方法:
(1).如何在程序編譯的時(shí)候中嵌入資源。資源文件和程序是二個(gè)獨(dú)立的文件,要把資源文件嵌入到最后生成的程序中,需要在編譯的時(shí)候加上"/resource"命令,這個(gè)命令可以簡寫為"/res"。在本文中程序的名稱為"use.cs",資源文件的名稱為"my.resources",則把資源嵌入程序的編譯命令如下:

csc.exe /res:my.resources use.cs

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

在.net framework sdk這提供了一個(gè)關(guān)于資源文件創(chuàng)建和使用的名稱空間--system.resources。在這個(gè)名稱空間中有一個(gè)class為resourcemanager,這個(gè)class的主要作用就是管理并使用資源文件。visual c#是通過這個(gè)類來管理并使用嵌入程序中的資源文件中的資源。下列代碼就是定義一個(gè)resourcemanager類來管理嵌入程序資源文件中的資源:

resourcemanager rm = new resourcemanager ( "images" , assembly.getexecutingassembly ( ) ) ;

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

在上一篇文章中,我們已經(jīng)了解到在創(chuàng)建資源文件的時(shí)候,使用了addresource ( )方法來加入資源,他的語法中的第一個(gè)參數(shù)是用戶可以定義的字符串,這個(gè)字符串就是資源在資源文件的唯一標(biāo)識(shí),在程序設(shè)計(jì)中,就是通過這個(gè)唯一標(biāo)識(shí)符來使用某個(gè)資源的。那么如何在程序中通過這個(gè)標(biāo)識(shí)符來得到所需資源?這就要使用到resourcemanager類中的getobject()和getstring()方法。這二個(gè)方法作用是獲得指定的資源。下面是這二個(gè)方法的語法:

object getsting(string)
object getobject(string)

其中的"string"就是資源在資源文件中的那個(gè)唯一標(biāo)識(shí)符。細(xì)心的讀者可能已經(jīng)注意到,這二個(gè)方法的返回值都是一個(gè)object類型的變量,也就是一個(gè)參考類型的變量,而在程序中的字符串或者圖象等,是一個(gè)實(shí)值類型變量。這就需要進(jìn)行轉(zhuǎn)換,而這種轉(zhuǎn)換就是上面所說的裝箱和出箱。下列代碼是從資源文件中提取字符串、圖象和圖標(biāo)資源:

提取字符串資源:

string s = ( ( string ) rm.getstring ( "mystr" ) ) ;

提取圖標(biāo)資源:

icon icodemo = ( ( icon ) rm.getobject ( "demo.ico" ) ) ;

提取圖象資源:

image a = ( ( image ) ( rm.getobject ( "ok-off.png" ) ) ) ;

四.結(jié)合一個(gè)程序例子來看一下,資源文件的具體使用方法:
下面的程序例子所使用的資源文件是上一篇文章中創(chuàng)建的資源文件"my.resources",程序中定義了三個(gè)lable組件,其中的二個(gè)的作用是顯示資源文件中圖象資源,另外一個(gè)的作用是顯示資源文件中字符串資源,程序的圖標(biāo)是取自資源文件中的圖標(biāo)資源。下面是程序的源代碼:

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 ) ;
//出箱
//使用資源文件中的圖標(biāo)資源
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" ) ) ) ;
}
}

五.總結(jié):
至此我們已經(jīng)完成了在visual c#資源文件方面編程的全部內(nèi)容,其中的主要內(nèi)容就是創(chuàng)建資源文件和使用資源文件二大方面,我想通過這二篇文章的介紹,你對(duì)資源文件應(yīng)該有了一個(gè)比較全面的認(rèn)識(shí)了吧!


菜鳥學(xué)堂:
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 白沙| 永丰县| 漳浦县| 阳山县| 富宁县| 南宁市| 穆棱市| 长子县| 普宁市| 西乌珠穆沁旗| 宾川县| 扎兰屯市| 宜君县| 昌吉市| 淮滨县| 长武县| 富蕴县| 房山区| 南昌县| 远安县| 武汉市| 东港市| 广西| 秀山| 济宁市| 东至县| 香河县| 清新县| 南郑县| 大余县| 蓬溪县| 青阳县| 永州市| 察雅县| 神池县| 肃南| 轮台县| 龙川县| 安达市| 云林县| 中方县|