gpt4 book ai didi

delphi - 视觉形式继承问题。 "cannot inherit from (parent form). Contains a component that does not support inheritance"

转载 作者:行者123 更新时间:2023-12-03 15:45:36 26 4
gpt4 key购买 nike

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

Delphi 7 不(据我所知)支持终结类,但这似乎是一个标准错误消息。它位于“Tomes of Delphi: Troubleshooting”的索引中,但我没有该副本,而且我不愿意花 60 美元阅读类似“这就是为什么你应该避免 VFI”之类的条目(对书的内容)。除此之外,Google 或 Bing 中没有任何引用。

这是我最近从不久前离开的人那里继承的代码,我是他们离开后第一个更改它的人。这意味着我无法询问他是如何创建有问题的表单的。

那么,如何解决此错误消息?

最佳答案

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

原始代码没有 TElRelDataSource

这意味着您正在尝试自行添加它。不要添加它,寻找不依赖 TElRelDataSource 的其他解决方案。

原来的代码确实有它!

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

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

关于delphi - 视觉形式继承问题。 "cannot inherit from (parent form). Contains a component that does not support inheritance",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4824653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com