Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi “如何调试或修复”;模块具有打开的子体或链接的模块”;错误?_Delphi_Delphi Xe4 - Fatal编程技术网

Delphi “如何调试或修复”;模块具有打开的子体或链接的模块”;错误?

Delphi “如何调试或修复”;模块具有打开的子体或链接的模块”;错误?,delphi,delphi-xe4,Delphi,Delphi Xe4,我有一个很长时间的问题,我不能将我继承的项目的主要形式视为文本。即使没有其他形式是开放的 如何调试此错误消息的原因?我有什么办法来修复它 我找到了一篇相关的新闻组文章,但这篇文章只讨论了表单继承的原因,没有解释任何有关链接模块的内容。我不相信我在使用表单继承 我确实有一个用于项目的DM(数据模块),表单确实通过表单上的TTreeView属性从DM加载了两个图像——拥有数据模块是否意味着我永远无法在Delphi中以文本形式查看表单(除了在记事本中以文本形式查看表单)?我的DM在IDE中是打开还是关

我有一个很长时间的问题,我不能将我继承的项目的主要形式视为文本。即使没有其他形式是开放的

如何调试此错误消息的原因?我有什么办法来修复它

我找到了一篇相关的新闻组文章,但这篇文章只讨论了表单继承的原因,没有解释任何有关链接模块的内容。我不相信我在使用表单继承

我确实有一个用于项目的DM(数据模块),表单确实通过表单上的TTreeView属性从DM加载了两个图像——拥有数据模块是否意味着我永远无法在Delphi中以文本形式查看表单(除了在记事本中以文本形式查看表单)?我的DM在IDE中是打开还是关闭似乎并不重要


我还发现了一个带有相关标题的SO问题(),但问题本身及其答案并不特别相关。

这有时是由从项目(或图库)中的另一个表单继承的表单(文档中称为可视表单继承,IIRC)引起的。IDE不知道如何找到表单的基类;它需要在子代窗体之前打开。例如,如果包含
TMyBaseForm
的单元没有首先在IDE中打开,这可能会导致相同的错误,特别是如果基本(祖先)单元没有首先包含在项目中:

unit SpecialForm;

interface

uses
  Forms, { all the other usual stuff }, BaseForm;

type
  TMySpecialForm = class(TMyBaseForm)
  private

  public

  end;
您可以通过查看表单的类声明来判断是否是这种情况-如果它不是从
TForm
派生的,这可能是错误的原因


(另一种情况是在使用数据模块时经常发生,因为基本的
TDataModule
.DFM不可用。试图以文本形式查看datamodule.DFM每次都会导致此错误;解决方法是关闭项目并使用外部编辑器(如记事本或记事本+)编辑数据模块的.DFM。)

我偶尔会遇到这个问题,可能是在我使用框架时,但我的最新实例不涉及框架、数据模块或继承的表单

在创建表单副本(该副本没有问题)并重命名原始单元和表单本身(最初似乎解决了问题)之后,大量的工作完成了,结果是表单之间的动态绑定


具体地说,在我的FMX申请表中,A有一个选项页,其中有一个TSpinBox,允许用户设置表格B上TTrackBar的最小值(这是给我带来悲伤的表格)。因此,TSpinBox.Value被设置为通过活动绑定更新TTrackBar.Min字段。关闭表单A或删除该活动绑定(并用事件处理程序替换它以执行相同的操作)解决了问题。

我想求助于Phillip J.Rayment的答案,并补充说,发生此问题不必使用活动绑定。有一个自定义控件(类)就足够了,其中有另一种形式的实例。然后,可能会出现RLink32问题,直到您关闭实例所在的表单后,问题才会得到解决。我遇到的问题给出了以下信息: -
RLink32(在构建期间)
-模块designide160.bpl`中的访问冲突(如果我修改了有问题的表单)
-模块有“打开的子体或链接的模块”错误(如果我尝试“以形式查看”)

您不能进行最小的复制吗?事实上,如果你这样做了,我预测你会自己解决这个问题。当您减少代码和组件时,您会发现问题消失了。因此,你剥去的最后一件东西就是钥匙。这是需要学习的基本调试技能。隔离问题。我会尝试进行最小复制。但是我仍然想理解这个错误的含义,因为到目前为止,我还没有找到任何关于这个错误的官方文件;-)嗯……我能够直接验证我的表单扩展了TForm,中间没有基类,表单肯定在uses子句中……所以我仍然倾向于怀疑继承不是我的原因。有任何指向“链接模块”的指针可能是导致此错误的原因吗?没有,抱歉。这是我遇到这个问题的唯一原因(这就是为什么我写“有时”而不是“原因是”)。您是否在项目文件(project->View Source)中缺少相关单元的一行?它应该是类似于
使用表单,Unit4在'Unit4.pas'{Form4}中-注意结尾处
{}
中的部分。这是你遇到问题的表单的当前版本吗?(如果您发布一些我们可以看到的代码或相关细节,而不必猜测您可能拥有或不拥有什么,这会容易得多。)此外,如果您从记事本打开所讨论的.dfm,那么.dfm中的第一行会说什么?它应该是
objectform4:TForm4
(当然,在这两种情况下都用表单的名称和类替换
Form4
)。事实上,问题并不是找不到基。相反,IDE已经打开了基础。而后代则打开了门。错误告诉您不能修改基,因为子代已打开。@大卫:事实上,不是。IDE很混乱,因为它认为您已打开它,但实际上它没有打开。(如果是,您可以在编辑器选项卡中找到它并关闭它,但您不能。)正如我所说,我以前经历过这种情况(事实上,就在几分钟前,一个数据模块显然没有在IDE中加载祖先)。