【问题标题】:"Loading of the ImageList did not succeed" exception occured发生“加载 ImageList 未成功”异常
【发布时间】:2014-02-06 08:37:49
【问题描述】:

我在加载 ImageStream 时遇到以下语句的问题。

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

例外:

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

当我浏览并看到 ImageStream 对象时,它为空。它也抛出了上述与“mscorelib”相关的异常。

任何建议和cmets将不胜感激

【问题讨论】:

  • 请告诉我,你想做什么?此代码是 winforms 设计器在 InitializeComponents() 中生成的代码(请参阅 here)。如果你在 form1.resx 中没有"imageList1.ImageStream",那么你会得到一个异常。

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


【解决方案1】:

对于底部的丑陋代码感到抱歉,但我是一个基于结果的程序员,必须让事情现在就开始工作。

我在 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");

【讨论】:

  • 哇 02/02/2023 我遇到了同样的问题。我将图像添加为嵌入式资源,它似乎有效。也许这就是我在 2018 年的问题
【解决方案2】:

我不明白你为什么使用 ImageStream

我更喜欢使用

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

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

【讨论】:

  • 这个问题是关于 C# 代码的。 ImageList_Create 是 Windows API 的一部分。
猜你喜欢
  • 2020-06-21
  • 1970-01-01
  • 2010-10-13
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多