• .NET中资源文件的使用


        工作需要,为VB.NET WinForm程序提供一个中英文界面切换功能,大方向有三个ini、XML、资源文件。

        首先ini太过时,坚决不打算用。资源文件和XML相比提供了一个资源文件管理器,编写键值对会很直观,就打算用资源文件方式了。虽然用记事本打开资源文件后发现这仍然是一些XML。

        resx格式的资源文件可以说有两种吧:一种是在解决方案资源管理器中点击显示全部文件后,可以看到在每个窗体下方都会有的以FormXXX.resx命名的,专属于某个Form的文件;另一种是为项目插入的全局资源文件,默认以ResourceXXX.resx方式命名。

        但是,具体应用中却遇到了问题。用ResourceManager读取资源文件,初始化代码:

        Dim rm as new ResourceManager(GetType(FormXXX))

        dim temp as string=rm.GetString("字段")

        这种方法可以正常运行。为了统一管理,我不打算把中英文对照表分散在各个窗体,想使用ResourceXXX式资源文件。无奈发现同样的代码,把FomrXXX替换成ResourceXXX却报错了,错误意思是:找不到ResourceXXX文件;于是查啊查,找到了一种调用方法

        dim temp as string=My.Resources.Resource1.字段名

        可是这种方法不太好啊,我有两份资源文件,难道每次切换中英文,相关的每一行代码都得改吗。而如果用类似 Dim rm as new ResourceManager(GetType(FormXXX))的方式,切换就方便多了,只需从根源上换一下GetType(FormXXX)的内容就行了。于是继续查啊查,最后静下来想起上MSDN看了下ResourceManager重载,找到了这个

    ResourceManager 构造函数 (String, Assembly)       

    public ResourceManager(
    	string baseName,
    	Assembly assembly
    )
    baseName
    类型:System.String
    资源文件的根名称,没有其扩展名但是包含所有完全限定的命名空间名称。 例如,名为"MyApplication.MyResource.en-US.resources"的资源文件的根名称为"MyApplication.MyResource"。
    assembly
    类型:System.Reflection.Assembly
    资源的主程序集。

    baseName是资源文件的根名称,用下面的代码

        Private rmEN As New ResourceManager("【试验】资源文件.Resource2", Assembly.GetExecutingAssembly)

    还是不行,猜想也许是不能有中文名吧,于是重新建立一个项目

        Private rmEN As New ResourceManager("WindowsApplication1.Resource2", Assembly.GetExecutingAssembly)

        嘿嘿,成功了!原来搞半天是这重载不能识别中文啊,想想也是,这段字符串是要被编译的,中文当然不行了。C#也一样,只需稍微改一下语法。

        而为什么Dim rm as new ResourceManager(GetType(FormXXX))这种代码却可以运行呢?不太确定,应该是因为FormXXX.resx是系统自动创建的,所以不需要手工指定根名称吧。



  • 相关阅读:
    Oracle 常用的V$ 视图脚本
    Oracle11g新特性
    深入浅出Oracle:Redo的作用
    oracle表空间操作详解
    Oracle Directory
    linux下手动删除数据库实例
    Oracle OS认证以及口令文件
    监控Oracle数据库的常用shell脚本
    Oracle 帐号基本管理
    Oracle小知识
  • 原文地址:https://www.cnblogs.com/zhixin9001/p/5008126.html
Copyright © 2020-2023  润新知