最近在进行代码合并的过程中,遇到了ImageList控件运行到SetKeyName方法时,提示IndexOutOfRangeException的情况.也即是索引超出的异常.分析设计器中图片数量,以及断点调试,发现设计界面中图片数量为9,实际运行时读取到的图片数量为6,导致,后续SetKeyName的时候,出现了超索引的问题.

解决思路:

  • 修复对应的form窗体的resx的资源文件
  • 排查是否改过form窗体多语言属性,注意类似en.resx,zh.resx这些多语言的资源文件.

根本原因:

ImageList会从resx资源文件中读取图片二进制的base64字串内容,但是,如果你设置了窗体的多语言,也即是窗体的language属性,那么,也要对应的修改zh.resx,en.resx这些资源文件.因为,设计器界面默认只修改缺省的resx文件,但是,运行程序的时候,会去读取对应的语言的resx资源文件.所以,删掉这些资源文件,那么ImageList就会只从缺省的Resx文件中读取了.

总结:

写下这篇文章,主要是网上能够查到的一些解决方案,大多都没有说明其本质,不能解决问题.希望我的这篇文章能够解决和我遇到这个相同问题的朋友.

发表回复