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

时间:2014-02-06 08:37:50

标签: c# .net winforms visual-studio-2010 runtime-error

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

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

例外:

  

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

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

非常感谢任何建议和意见

2 个答案:

答案 0 :(得分:0)

对不起底部的难看代码,但是我是一个基于结果的程序员,必须立即使事情正常工作。

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

逐步执行大量代码,似乎此调用:

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

在designer.cs中,生成文件失败。

设计师无法解决任何问题。在紧急情况下,我只是在调用initializeComponent()之前手动创建了图像列表。

我确定它与winform的复杂性及其在Visual Studio IDE中的设计者有关-但由于我现在需要结果而无法证明。

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

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 :(得分:-1)

我不明白你为什么使用 ImageStream

我更喜欢使用

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

然后您可以在加载前分配图像。