当前位置:编程学习 > C#/ASP.NET >>

C# WINFORM 如果动态写入资源文件

记得以前WIN32 有个API可以做这事的 忘记了

但是 C# 有系统函数可以做这个事情吗?

忘高手解答: 看楼下 --------------------编程问答-------------------- 一时也没想到,帮顶 --------------------编程问答-------------------- 如果是嵌入式资源文件也是编译,所以应该无法动态更改

如果系统API支持,那么你可以直接在.NET通过 P/I 调用这个API --------------------编程问答-------------------- 引用自:http://www.diybl.com/course/4_webprogram/asp.net/asp_netshl/2008822/137028.html

 C#写WinForm的时候,常常用到里面的资料文件.就比如加入一个窗体的背景图片.如果不加入资源文件的时候,只能把图片放入Bin目录下, 然用Application.StartupPath+文件名从而加入图片.这一种法有一个不好的地方就是如果图片被用户删了什么办呢?所以我个人认为, 最好用的就是导入资料文件.

       导入资料文件很简单,这里就不用说啦.下面谈一谈引用资源文件的几个方法.有谁需要用到这一点知识的可以参考一下:

       一,用反射的方法.

               Assembly assem = this.GetType().Assembly;
            Stream stream = assem.GetManifestResourceStream("Draw.Resources.xunmeng.jpg");
            this.BackgroundImage = new Bitmap(stream);

       二,常用的方法.

             //这里用的引用的是字符串

             ResourceManager resource = new ResourceManager(typeof(About));
            this.label1.Text = (string)resource.GetObject("MyName");

        三,资源文件读取类.

                          using (ResXResourceReader reader = new ResXResourceReader(@"About.resx"))
            {
                foreach (DictionaryEntry entry in reader)
                {
                    if (entry.Key.ToString() == "MyName")
                    {
                        this.label2.Text = (string)entry.Value;
                    }
                }
            }

     我个人比较喜欢用第二种方法.第一种方法也是比较好的,但第三种的话可能要出问题.具体的自己试一试好啦. --------------------编程问答-------------------- 楼上是个办法,做法很标准化,但是开发上比较麻烦。
简单的办法,如果不考虑共用资源,不考虑内存消耗。那么序列化保存实体类或资源数据将是最简单,最有效的方式。 --------------------编程问答-------------------- 我自己写的一段代码

  private Image InitLineStateImage(LineState state)
        {
            switch (state)
            {
                case LineState.WaitUse:
                    return global::gcmsApp.Properties.Resources.waitUseBIg;
                case LineState.Stop:
                    return global::gcmsApp.Properties.Resources.stopBig;
                case LineState.Working:
                    return global::gcmsApp.Properties.Resources.workingBig;
                case LineState.Fault:
                    return global::gcmsApp.Properties.Resources.FaultBig;
                case LineState.OnLine:
                    return global::gcmsApp.Properties.Resources.InPosition;
                default:
                    return global::gcmsApp.Properties.Resources.waitUseBIg;
            }
        }

我用的是这种方法,直接利用资源文件。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,