知识大全 浅析VisualBasic.NET中的资源使用

Posted 资源

篇首语:月缺不改光,箭折不改钢。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 浅析VisualBasic.NET中的资源使用相关的知识,希望对你有一定的参考价值。

浅析VisualBasic.NET中的资源使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在我了解到的程序世界中 资源的初次登场是因为程序的国际化 当时的可执行文件已不再是单调的英文面孔 汉语 西班牙语等国际语言的支持强烈要求同样的程序 可以使用不同的语言界面 在当时 将程序逻辑代码和提示信息分离是一个不错的主意 堤示信息分离出来成为一个资源文件而独立存在 在程序进行编译时再由编译器链接到可执行文件中 直到现在 资源在这个方面依然扮演着重要的角色 以下以的一个小例子说明资源的存在   例一 时下许多网上的软件都有什么多国语言版之类的说法 实在点就是同一程序在安装或使用过程中有个国家区域选项 当你选择了对应的国家时 程序就会显示使用相应国家语言的界面 其实在编程实现这种功能非常简单 只不过是使程序同时嵌入几个不同语言的资源文件而已 以下示例就是一个同时支持英文和中文界面的示例程序 程序创建完整步骤如下

   在中新建一个项目 类型选择windows应用程序 项目名称改为resourcesample    在form 上放一个Lable控件    选择窗体form 按以下指示设置属性:  ( )Locallizable 属性设为True 这一步是关键 这个属性告诉net环境 要使用资源文件来保存窗体及窗体内的各种控件的属性值   ( )选择窗体的language属性 将其设为英语 然后按下表设置窗体及lable控件的其它属性:

控件名称 属性 属性值 Form text Form Label Text Let s speak English!  窗体外观如下   ( )重新选择窗体的language属性 将其设为中文(简体) 然后按下表设置窗体及lable控件的其它属性: 控件名称 属性 属性值 Form text 窗体 Label Text  让我们说中文!  窗体外观如下   大家也许很奇怪 为什么要对窗体及label的text属性进行两次不同的赋值呢?其实答案很简单 太聪明了 由于我们使用Locallizable 属性告诉net环境 要使用资源文件来保存窗体及窗体内的各种控件的属性值 当使用不同的language属性 它会将窗体及其上控件的属性按语言分别记录在不同的资源文件内 不信你将language属性重新设为英语看看 第一个英文界面的窗体又跳出来了吧 D 如果说可视化编程是光明之途的话 那么我们的快乐时光到此结束 由于net还没有智能化到会判断什么时候使用什么国家的语言界面的程度(如果net 太智能了 程序员就不幸了 下岗啊 谁受得了?!) 所以以下必须由我们自己编写代码确定程序的实际界面显示   打开 form 的New过程 在InitializeComponent()前加入如下代码(这段代码作用是在窗体初始化组件之前 按指定的语言区域信息载入相应的界面资源文件) Dim tenmDialogResult As DialogResulttenmDialogResult = MessageBox Show( 请问是使用中文还是英语 中文选择OK 英文选择CANCEL _ 语言选择 _MessageBoxButtons OKCancel _MessageBoxIcon Question _MessageBoxDefaultButton Button _MessageBoxOptions DefaultDesktopOnly)   REM 一般情况下程序都是使用读取初始化文件的方法来取得语言设置信息 但本例程为了简便起见 仅使用一个对话框提示用户选择适合自己的语言 If tenmDialogResult = DialogResult OK Then 使用中文界面gstrAppCulture = zh CHS Else 使用英文界面gstrAppCulture = en End If 将需要使用的区域信息放到当前线程的区域信息中 程序窗体会根据设定的信息装载相应的资源文件以显示信息System Threading Thread CurrentThread CurrentUICulture = _New System Globalization CultureInfo(gstrAppCulture)

  剩下的事这没什么好说的了 按运行吧 在出现对话框时试着点OK或Cancel看看你的杰作吧 很酷的同时支持中英文界面的示例程序哦 伟大的思想家会说 我们要透过现象看到事物的本质 我虽说对哲学不感兴趣 但对net在后台到底瞒着我干了些什么见不得光的勾当还是非常好奇的 点击解决方案资源管理器 点击 显示所有文件 的按纽 很惊奇地发现在form vb下出现了几个后缀名为resx的文件 这些家伙就是本文要说明的资源文件了(留意一下资源文件的文件名包含的en和zh CHS的字符 这就代表该资源文件储存的语言内容 en为英文 zh CHS为简体中文)            双击form en resx 看一下资源文件是如何储存界面的语言信息的    

>  左边的数据源显示资源文件的实际数据(data)以及资源文件的文件版本信息(resheader) 我只关心资源文件的实际数据储存 右边的表列出了储存的数据:很显然name代表控件的属性(其实是引用资源数据的键) 后面的value代表对应键的实际数据(在程序中界面显示的值就靠这里了 你可以试着把Let s apeak English改一下 然后运行一下程序看看) ment代表注释 type代表数据的类型 mimetype就是资源数据的MIME 类型(当你窗体或picturebox存有图片时你会看到这里有一个很长的值 由于这个对编程作用不大 不作解释) 我们还可以在这个界面中插入新的资源数据 只要填写好name和value就可以了   明白了资源文件后 我们再看一下代码中是怎样引用这引些值的 打开窗体的代码编辑器 展开 Windows 窗体设计器生成的代码 这一代码段 找到窗体的Private Sub InitializeComponent()过程   第一句为: Dim resources As System Resources ResourceManager = New System Resources ResourceManager(GetType(Form ))

  这句代码的含义就是产生一个resourcemanager对象来对form 的资源文件进行控制 由于net 会根据线程的区域属性调用窗体的不同语言的资源文件 所以我们前面示例中将改变线程区域信息的代码放在InitializeComponent()过程之前 以便net在创建resources对象时调用正确的语言资源文件   接下来就是一大堆对控件属性进行赋值的语句了 看一下label的text 属性是如何赋值的就会明白资源数据的使用方法了 Me Label Text = resources GetString( Label Text )  很简单 使用ResourceManager的方法就可以获得实际需要的资源数据了必要时可以可以使用getobjcet方法取得数据 然后再用Ctype将其转为指定的类型   写到这儿 本来按原计划我是想收笔的 但是天气依然阴沉沉 很闷 干脆就将资源使用的终极杀招也介绍一下好了 资源发展到现在已不权是简单地解决程序国际化的界面方面了 在net中可以使用资源将任意文件嵌入到你的可执行文件中 在需要时再用流的方式读出使用(是任意文件哦 而且方法非常简单) 好象很酷的样子吧 以下我就用另一个示例说明一下 示例 在net中可执行文件中嵌入一个文本文件

  以前我做程序 版权使用协议信息总是放在一个txt文本文件中 打包时和可执行文件放在一起 在安装时释放到程序的安装路径 然后再打开使用 这种做法有两大坏处 一是这个文件很容易被其它人修改 二是可以套用蜡笔小新的一句话 这种做法太不成熟了吧! 现在我使用一个新的方法 就是将协议和可执行文件结合在一起 在程序运行时读出使用 当然这就全靠资源的作用了 步骤如下    在中新建一个项目 类型选择windows应用程序 项目名称改为resourcesample    点击项目菜单 选择添加现有项 接着会弹出一个文件对话框 将文件类型改为所有文件后 选择要嵌入的txt文件(其实这时你可选择任意文件 只要你喜欢* ) 接着你会在解决方案资源管理器中发现你新加入的文件名 如图               关键的一步到了 在解决方案资源管理器中点击你刚加入的文件名 然后在属性窗体中将 加成操作 这一属性改为 嵌入的资源 这将告诉net 刚加入的文件将会作为资源链接进可执行文件中 留意一下文件名哦 这在后面的程序中也很重要 强烈建议使用小写文件名!如下图

   接下就是在程序中用代码读出这个文件的内容   在Form _Click事件中加入代码 如下所示 Private Sub Form _Click(ByVal sender As Object ByVal e As System EventArgs) Handles MyBase ClickDim tobjStream As IO Stream = Me GetType Assembly GetManifestResourceStream( resourcesample License txt )Dim tobjStreamReader As New IO StreamReader(tobjStream System Text Encoding Default)Dim tstrLicense As String = tobjStreamReader ReadToEnd 如果是图象就可以使用dim tobjBMP as new bmp(tobjstrem)的方法直接得到资源内容MessageBox Show(tstrLicense) 显示刚才读得的结果End Sub  在此对上述代码进行一点解释 net是通过Assembly的GetManifestResourceStream读出嵌入在可执行文件的资源并以IO Stream对象返回(反正得到了这个流 就好象你时进行文件流操作 读/写到磁盘或象我一样在程序内部处理都由你自己决定了) 这个方法的唯一参数是资源的唯一标识 是按如下方式组成的 程序集的根命名空间+ +资源在属性窗口显示的文件名(这是区分大小写的 在上文已提醒你注意了哦 而且这个标识法在C#中是不同的 别问我为什么 谁叫你不和我一样使用 哼 )   程序集的根命空间的名你可以从项目菜单下的XXXX(XXXX是你的项目名称 可不要认为是骂人的话 )属性中看到 >  其余的代码就是以流方式读文件了 很简单吧    按生成菜单下的生成解决方案 然后到你可执文件的目录下看看 你会发现除了可执行文件外没有别的文本文件 因为文本文件已以资源的方式存在于可执行文件中啦 运行一下看看效果啊(一些想做黑客的菜鸟又有什么怪怪的想法 藏木马?……)  资源的使用就介绍到此为至吧 窗外依然小雨菲菲 在虚幻的网络和残酷的现实边缘排徊久了 写文章都有点怪怪的 请大伙儿原谅 祝大伙编程愉快   cha138/Article/program/net/201311/13715

相关参考

浅析固体废弃物资源化技术

固体废弃物包括工业固体废弃物和生产生活建设等固体废弃物。这些固体废物有工业生产加工过程中产生的废料、废渣、粉尘和污泥以及生活生产中的产生的粉煤灰以及建设产生的水泥渣等。固体废弃物量增多,污染种类越来越

浅析固体废弃物资源化技术

固体废弃物包括工业固体废弃物和生产生活建设等固体废弃物。这些固体废物有工业生产加工过程中产生的废料、废渣、粉尘和污泥以及生活生产中的产生的粉煤灰以及建设产生的水泥渣等。固体废弃物量增多,污染种类越来越

浅析固体废弃物资源化技术

固体废弃物包括工业固体废弃物和生产生活建设等固体废弃物。这些固体废物有工业生产加工过程中产生的废料、废渣、粉尘和污泥以及生活生产中的产生的粉煤灰以及建设产生的水泥渣等。固体废弃物量增多,污染种类越来越

浅析电镀含铜和含镍污泥的资源化回收工艺

前言电镀生产企业,根据不同的镀种和产品,均须大量选用各种重金属作为原料,如金、银、铜、镍、铬、锌、铁、镉等。在电镀过程中,部分重金属进入废水中,并通过废水处理流程进入污泥,成为电镀污泥。电镀污泥是一种

浅析电镀含铜和含镍污泥的资源化回收工艺

前言电镀生产企业,根据不同的镀种和产品,均须大量选用各种重金属作为原料,如金、银、铜、镍、铬、锌、铁、镉等。在电镀过程中,部分重金属进入废水中,并通过废水处理流程进入污泥,成为电镀污泥。电镀污泥是一种

浅析电镀含铜和含镍污泥的资源化回收工艺

前言电镀生产企业,根据不同的镀种和产品,均须大量选用各种重金属作为原料,如金、银、铜、镍、铬、锌、铁、镉等。在电镀过程中,部分重金属进入废水中,并通过废水处理流程进入污泥,成为电镀污泥。电镀污泥是一种

浅析环保工程的污水处理

伴随着经济与社会不断进步,城市化进程也得到了大力的提升,人们对水的需求量与日剧增,特别在当前水能资源严重枯竭的形势下,很多水资源丰富的国家之中也出现了水资源供不应求的局面。因此,。一、当前我国污水处理

浅析环保工程的污水处理

伴随着经济与社会不断进步,城市化进程也得到了大力的提升,人们对水的需求量与日剧增,特别在当前水能资源严重枯竭的形势下,很多水资源丰富的国家之中也出现了水资源供不应求的局面。因此,。一、当前我国污水处理

浅析环保工程的污水处理

伴随着经济与社会不断进步,城市化进程也得到了大力的提升,人们对水的需求量与日剧增,特别在当前水能资源严重枯竭的形势下,很多水资源丰富的国家之中也出现了水资源供不应求的局面。因此,。一、当前我国污水处理

知识大全 Visual Basic.Net基本语句

VisualBasic.Net基本语句  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一Try…