2011-12-09 48 views
1

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

尝试创建新位图时,返回的错误消息是通用“参数无效”。堆栈跟踪将“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 =不复制。

我的开发计算机运行的是Windows 7,而且生产环境为Windows Server 2003 SP2。该项目是在.NET 3.5中,他们都有。这种形式可以在不同的客户端机器上使用,所以它应该能够在Server 2003中运行起来。

感谢您的任何建议!

编辑: 在几分钟内,并且已经建议此设置根本不起作用。我在上面指出,这在我的电脑上都可以在Visual Studio调试模式下使用,并且可以在自己的电脑上调用。图标文件本身在网络共享上关闭,因此DLL无法将其拉入;文件必须正确嵌入,并且位图/图标转换必须正常工作,否则在我的机器上根本无法工作。

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

+0

使用ILspy或反射器检查生成的exe文件以查看资源是否实际位于部署的程序集中。 –

回答

0

尝试使用Icon类而不是位图。我不相信他们是兼容的。

编辑:只记得别的东西...图标是一种多图像格式。它们是位图,但它可以包含不同分辨率的多个图像。但是,就像@ PedroC88所说的,打电话给ToBitmap,它会转换。虽然我认为它使用的尺寸是系统确定的,您不能选择。

+0

要转换大小,您可以使用'Graphics'对象将其绘制成新的位图,只需记住调整必要的属性以避免质量下降,请检查此msdn以获取更多信息。 http://amzn.to/rtwL5V – PedroC88

1

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