假设我有一个带有ImageList的数据模块。我还有一个带按钮的表格。如果我想连接按钮的ImageList属性,我会将DataModule添加到窗体使用,然后在按钮属性的Image下拉列表中选择ImageList。
但是,我现在可以从Forms使用列表中删除DataModule,但事情似乎仍然正常。
此外,如果DataModule在IDE中打开而不在表单使用列表中打开,我可以手动键入按钮的images属性,图像列表的名称,它似乎正确显示按钮上的图像
问题:如果我不小心从控件引用的表单使用列表中删除了某些内容,是否会产生任何不利影响?
我目前正在清理大型项目中数百个表单的使用列表(使用cnPack和Icarus),我想知道我需要多么小心(或无情)。
答案 0 :(得分:5)
如果IDE能够在设计时找到DataModule(对于未设置的属性),则必须满足以下条件:
为了让IDE能够在设计时再次找到DataModule(对于已设置的属性),必须满足以下条件:
对于能够在运行时找到DataModule(对于已经设置的属性)的程序:
对于能够在运行时找到DataModule(对于未设置的属性)的程序:
因此,从理论上讲,如果满足所有正确的条件,则可以从Form的uses子句中省略DataModule单元。但是为了对运行时链接有信心,我会得出结论,没有安全或至少没有方便的逃避将DataModule单元添加到Form单元的uses子句中。
(*)在具有许多Forms和DataModule的大型项目中,很常见的是不打开IDE中的每个DataModule,并且设置很容易丢失。依赖于DataModule名称的设计时绑定,可能会导致您的表单永远不会显示任何数据(或在这种情况下为图像)。这是一个很难预见的错误,无需检查每个Form的DataModule设置。
解决方案是在运行时手动设置所有引用DataModule组件的属性,最好是在重写构造函数或OnCreate事件处理程序中。这也可以防止多个DataModule实例的重复命名问题,因为this question处理。
答案 1 :(得分:4)
组件属性(如图像)的链接独立于使用列表中的合适条目。魔术隐藏在流媒体系统中(寻找xxxFixUpReferences)。只要编译器没有抱怨,您就可以安全地删除这些条目。
IDE可能仍然不满意。