多年来,我一直在Delphi中分享多种形式的图像列表.我在我的应用程序的主要表单上有一个TImageList,然后我有其他形式的组件,我在设计时将Images属性设置为主窗体中的图像列表(例如MyMainForm.MyImageList).
我遇到的问题是随机的Images属性在那些引用主窗体上的图像列表的表单上被清除.
这似乎最近才刚刚开始,但我还没有找到确切的原因.我似乎无法找到一种随意重现问题的方法; 它似乎随机发生.我确实注意到它在表单打开时正好发生了.
我最近在Delphi中做过的一件事就是启用了Autosave Project桌面和符号功能.所以现在当我打开这个项目时,它总是会记住哪些表格是开放的.因此,当打开表单时会发生此问题,并且因为它现在重新打开上次打开项目时打开的所有表单,它会更频繁地发生.
我们有一些开发人员正在开发这个项目,我们正在使用SVN进行版本控制.启用自动保存项目桌面和符号功能的一个问题是,当我们对项目进行SNV更新时,符号文件可能变为无效(因为我们在版本控制下没有符号文件).这只会导致Delphi发出错误消息,但除此之外它似乎无害.我们只是重新编译项目并修复了符号文件.
顺便说一下,我正在使用Delphi 7.
如果您有任何疑问或需要澄清,请发表评论,我会更新问题.
多年前我遇到了同样的问题.从那时起,我就养成了将几个表单共享的图像列表放到TDataModule上的习惯.然后德尔福不会丢失链接.将非可视组件放在数据模块上还可以减少表单上的设计时间混乱.在运行时,TDataModule在主窗体之前实例化.
当我遇到这种类型的行为时,总是因为我打开了"其他"表单而没有在IDE中打开主表单... IDE将尝试解析MyMainForm.MyImageList引用,失败并删除引用.
我们通过在代码中手动分配图像列表来解决这个问题(通常在AfterConstruction中).