嵌入式图像的.NET问题

时间:2011-12-09 15:07:46

标签: c# .net treeview bitmap icons

我有一个包含TreeView的Windows窗体。树视图包含其节点的图像,这些图像是项目中的嵌入资源。在我的开发机器上运行表单时(在Visual Studio内部和外部),它运行正常,每个treenodes都有正确的图像。在生产框上运行时,窗口在尝试加载嵌入的图像时会遇到错误。我添加了逻辑,如果发生这种情况不使用图像,所以树仍然显示,但我想弄清楚问题是什么以及如何解决它。

尝试创建新的位图时,返回的错误消息是通用的“参数无效”。堆栈跟踪将“System.Drawing.Bitmap..ctor(Type type,String resource)”行作为失败点。请参阅下面的代码。

ImageList imageListNodes = new ImageList();
Bitmap mIcon;
mIcon = new Bitmap(this.GetType(), "m2.ico");   // This is the line that fails.
imageListNodes.Images.Add("m", (Image)mIcon);
tvRecords.ImageList = imageListNodes;   // This is the treeview used in the form.

文件m2.ico已直接添加到项目中。其属性包括Build Action = Embedded Resource,以及Copy to Output Directory = Do not copy。

我的开发计算机运行的是Windows 7,生产的是Windows Server 2003 SP2,具有Citrix环境。该项目是在.NET 3.5中,他们都有。此表单可在不同的客户端计算机上使用,因此它应该能够在Server 2003及更高版本中运行。

感谢您的任何建议!

修改 几分钟后,已经建议此设置根本不起作用。我在上面已经注意到,这在我的计算机上都可以在Visual Studio调试模式下工作,并且在自己调用时也可以。图标文件本身在网络共享上是关闭的,因此DLL无法将它们拉入;必须正确嵌入文件,并且位图/图标转换必须正常工作,否则它在我的机器上根本不起作用。

我很欣赏这些建议,并且我愿意尝试其他方法来实现相同的目标,但请注意我的初步问题至少是为什么这可以在我的计算机上运行而不是另一个。谢谢!

2 个答案:

答案 0 :(得分:1)

我认为您不能将.ico加载到图像中。为什么不尝试先在Icon对象中加载图标,然后调用Icon.ToBitmap来获取图像。

答案 1 :(得分:0)

尝试使用Icon类,而不是Bitmap。我不相信它们是兼容的。

编辑:记住其他内容......图标是多图像格式。它们是位图,但它可以包含不同分辨率的多个图像。但是,就像@ PedroC88所说,调用ToBitmap并将它转换。虽然我认为它使用的尺寸是系统确定的,你不能选择。