“加载ImageList没有成功”发生异常

问题描述 投票:0回答:2

在加载ImageStream时,我在下面的语句中遇到问题。

this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageS‌​tream"))); 

例外:

System.Reflection.TargetInvocationException:调用目标抛出了异常。 ---> System.InvalidOperationException:加载ImageList没有成功

当我浏览并看到ImageStream对象时,它为null。它抛出了与“mscorelib”相关的上述例外。

任何建议和意见将不胜感激

c# .net winforms visual-studio-2010 runtime-error
2个回答
0
投票

对不起底部的丑陋代码,但我是一个基于结果的程序员,必须让事情现在正常工作。

我在InitializeComponent()上遇到运行时错误而遇到紧急情况;它失败了,我的winforms应用程序是一个空白屏幕。

单步执行大量代码似乎是这个调用:

this.imageList1.ImageStream =((System.Windows.Forms.ImageListStreamer)(resources.GetObject(“imageList1.ImageS tream”)));

在designer.cs中,generate文件是失败的地方。

没有什么可以解决设计师的问题。在紧急情况下,我只是手动创建图像列表在initializeComponent()调用之前。

我确信它与视觉工作室IDE中的winform及其设计者代的复杂性有关 - 但无法证明它,因为我现在需要结果。

因此,如果您从表单中删除图像列表,请将图像添加为“嵌入资源”,然后手动加载图像列表。我“想”设计师实际上没有嵌入资源。

ilssC                  = new ImageList();
ilssC.ColorDepth       = System.Windows.Forms.ColorDepth.Depth16Bit;
ilssC.ImageSize        = new System.Drawing.Size(200, 150);
ilssC.TransparentColor = System.Drawing.Color.Transparent;
Assembly myAssembly    = Assembly.GetExecutingAssembly();
Stream myStream        = myAssembly.GetManifestResourceStream("SafeEnv.Resources.ssbars00.jpg");
Bitmap bmp             = new Bitmap(myStream);
ilssC.Images.Add         ("ssbars00.jpg",bmp);
myStream               = myAssembly.GetManifestResourceStream("SafeEnv.Resources.ssbars01a.jpg");
bmp                    = new Bitmap(myStream);
ilssC.Images.Add         ("ssbars01a.jpg",bmp);
myStream               = myAssembly.GetManifestResourceStream("SafeEnv.Resources.ssbars02a.jpg");
bmp                    = new Bitmap(myStream);
ilssC.Images.Add         ("ssbars02a.jpg", bmp);
myStream               = myAssembly.GetManifestResourceStream("SafeEnv.Resources.ssbars03a.jpg");
bmp                    = new Bitmap(myStream);
ilssC.Images.Add         ("ssbars03a.jpg", bmp);
myStream               = myAssembly.GetManifestResourceStream("SafeEnv.Resources.ssbars04a.jpg");
bmp                    = new Bitmap(myStream);
ilssC.Images.Add         ("ssbars04a.jpg", bmp);
myStream               = myAssembly.GetManifestResourceStream("SafeEnv.Resources.ssbars05a.jpg");
bmp                    = new Bitmap(myStream);
ilssC.Images.Add         ("ssbars05a.jpg", bmp);
ilssC.Images.SetKeyName  (0, "ssbars00.jpg");
ilssC.Images.SetKeyName  (1, "ssbars01a.jpg");
ilssC.Images.SetKeyName  (2, "ssbars02a.jpg");
ilssC.Images.SetKeyName  (3, "ssbars03a.jpg");
ilssC.Images.SetKeyName  (4, "ssbars04a.jpg");
ilssC.Images.SetKeyName  (5, "ssbars05a.jpg");

-1
投票

我不明白你为什么使用ImageStream

我更喜欢使用

HIMAGELIST ImageList_Create(
  int cx,
  int cy,
  UINT flags,
  int cInitial,
  int cGrow
);

然后你可以在加载之前分配你的图像。

© www.soinside.com 2019 - 2024. All rights reserved.