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#