【问题标题】:Visual Form Inheritance problem. "cannot inherit from (parent form). Contains a component that does not support inheritance"视觉形式继承问题。 “不能从(父窗体)继承。包含不支持继承的组件”
【发布时间】:2011-01-28 03:45:24
【问题描述】:

我有一个带有后代的基本表单。基本表单上有一个 TElRelDataSource(来自 ElPack v4.00)。当我打开后代表单时,出现错误“无法从(父表单)继承。包含不支持继承的组件”。这是在祖先表单打开的情况下(有两个),以避免“找不到(父表单)的祖先”错误。

Delphi 7 (AFAIK) 不支持最终确定类,但这似乎是标准错误消息。它在“德尔福之书:故障排除”的索引中,但我没有那个副本,我不愿意花 60 美元阅读“这就是为什么你应该避免 VFI”这样的条目(对书的内容)。除此之外,在 Google 或 Bing 中没有引用。

这是我最近从不久前离开的人那里继承的代码,我是他们离开后第一个更改它的人。这意味着我不能问他是如何创建违规表格的。

那么,我该如何绕过这个错误信息呢?

【问题讨论】:

    标签: delphi delphi-7


    【解决方案1】:

    你让自己陷入了一个有趣的问题。首先,您说父表单已经包含有问题的 DataSource,所以您必须问自己一个问题:原始开发人员是如何设法将数据集放在父表单上然后创建的子表单,如果创建子表单被数据源拒绝?

    原代码没有TElRelDataSource

    这意味着您正在尝试自己添加它。不加了,找其他不依赖TElRelDataSource的方案。

    原来的代码确实有!

    原始版本可能是针对不同版本的 TElRelDataSource 编译的,该版本确实允许继承。 “可继承性”由“csInheritable”组件样式控制。也就是说,如果组件在 ComponentStyle 中不包含“csInheritable”,则 Delphi IDE 将不允许可视继承。您有多种选择:

    • 使用不同版本的 TElRelDataSource,可能原始版本是针对较新版本的 TElRelDataSource 编译的。如果您使用的是最新的 TElRelDataSource,作者可能认为它的代码无法处理视觉继承,因此他/她从 ComponentStyle 中删除了 csInheritable 标志!
    • 尝试制作自己的派生组件并自己设置该样式。这很容易做到,但如果 TElRelDataSource 的作者出于某种原因删除了 csInheritable 标志,您可能会遇到麻烦。
    • 通常 HeartWare 的想法会很好用;不幸的是,使用 DATA SOURCE 组件并不容易:我假设您有与该数据源链接的 DB-Aware 控件。如果您从代码创建 DataSource,您还需要重新创建与数据感知控件的连接,这将需要大量的“if-s”(或巧妙地使用 RTTI)。
    • 您可以尝试将 DataSource 移动到 TDataModule。这可能比它更值得麻烦。

    【讨论】:

    • 不幸的是,原始代码有组件(我以前从未见过),我们没有使用更新版本的 ElPack 组件,因为我们的“hacks”不适用于新版本。您的“修改组件”看起来像是要走的路,但首先我会尝试发现我们是否可以在没有 ElRelDS 组件添加到标准数据源的情况下生存。
    • 标记为已回答,因为您提到了“csInheritable”,这是我真的不知道的关键事实。谢谢你。
    【解决方案2】:

    一种选择是从表单中删除有问题的组件并在 FormCreate 事件中动态分配它。根据(假定的)非可视数据源组件有多少属性,这可能相当简单。

    【讨论】:

    • GExperts “组件到代码”可以帮助完成这项任务。 (gexperts.org/tour/components_to_code.html)
    • 感谢您的提醒 - 我已经安装了 GExperts,如果一切都失败了,我可以走这条路。但是由于有几种后代形式和大量链接的数据库控件,这将是一个很大的努力。但是,如果所有其他方法都失败了,这是一个选择。
    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2016-11-02
    • 2011-12-10
    • 1970-01-01
    相关资源
    最近更新 更多