Delphi:如何消除“找不到TMyForm的祖先错误”?

16

我有一些继承自TMyForm的表单(TMyForm是一个具有源代码形式的第三方组件)。

当我在IDE中打开从TMyForm继承的表单时,会出现以下错误:

创建表单时出错:找不到“TMyForm”的祖先。

解决方法是在IDE中打开TMyForm单元,然后再尝试打开我的继承表单。

但是我该如何避免Delphi给出这个错误,并能够打开我的表单,即使TMyForm没有在IDE中打开?

3个回答

15

在我的情况下,我有一个单一的项目,所以我将它添加到dpr中,并且它运行良好。谢谢。 - UnDiUdin
你可以编写一个IDE专家,监视文件的打开情况,并在正确的文件上先打开父窗体。我已经使用过这个方法,它很有效。 - Lars Truijens

3

我的解决方法。有几种方法:

  • 将所有父表单的完整路径添加到项目中。由于绝对路径的缘故,不太方便。
  • 将包含父表单的包添加到项目列表中。在这种情况下,没有问题。但是每次在Delphi环境中打开组件时都需要这样做。
  • 使用Embarcadero提供的临时解决方案。

这样可以自动打开所有子窗体:

关于此问题的支持请求已创建约10年: http://qc.embarcadero.com/wc/qcmain.aspx?d=8376

在此处可下载适用于Delphi XE2的版本: https://bitbucket.org/hemn/autoopenunit

我推荐使用它!


2
请注意,QualityCentral现已关闭,因此您无法再访问qc.embarcadero.com链接。如果您需要访问旧的QC数据,请查看QCScraper - Remy Lebeau
抱歉,但是那个ScanFF的更改对我来说似乎有些不对。为什么要撤销Unicode呢?我进行了更广泛的优化https://github.com/the-Arioch/XE2_AutoOpenUnit,并且再次遇到了XE2字符串双重释放错误... - Arioch 'The

1
我一直在寻找解决方案,现在终于找到了。我正在使用一个带有多个基本表单和框架的包。我已经将它们添加到存储库中,但仍然出现错误。其中一些表单和框架在项目管理器中没有显示“dfm”,似乎关键是编辑.dpr文件并在花括号中添加名称:
fIBSConnectionForm in 'GUI\BaseGUI\fIBSConnectionFrom.pas',

转换为

fIBSConnectionForm in 'GUI\BaseGUI\fIBSConnectionFrom.pas' {frmIBSConnectionForm},

对于框架,请确保使用 {f...: TFrame}。

这样做并重新启动 Delphi 后,我可以再次打开派生表单!


对我来说,在 DPR 文件中使用完整路径会导致一些不必要的副作用(不记得具体是什么了),而指定表单名称而不带路径会导致另一个错误 -“无法打开 c:\windows\system32\frmIBSConnectionForm”- 真是疯狂... - Arioch 'The
这不是完整路径,而是相对于项目文件的路径。显然,在我的情况下,它是TfrmIBSConnectionForm(没有'T',这被省略了),并且单元fIBSConnectionForm - 您的窗体可能有不同的名称。 - Martijn Tonies
当然,我已经按照你的示例将名称更改。在我的情况下,XE2只是尝试进入system32。疯狂的IDE,真的很疯狂。它甚至对直接从“TForm”派生的表单进行警告! - Arioch 'The

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接