我有这个长时间的问题,我不能将文本视为我继承的项目的主要表单。即使没有其他形式开放。
如何调试此错误消息的原因?我有什么选择来解决它?
我发现了一个相关的新闻组http://embarcadero.newsgroups.archived.at/public.delphi.ide/200906/0906193960.html,但这只涉及表单继承原因,并没有解释任何有关链接模块的内容。我不相信我正在使用表单继承。
我有一个项目的DM(数据模块),表单确实通过表格上的TTreeView属性从dm加载了几个图像 - 确实有一个数据模块自动意味着我永远不能查看在Delphi中发表表格(除了在记事本中查看表格)?在IDE中我的DM是打开还是关闭似乎并不重要。
我还发现了一个带有相关标题的问题(Module %s has open descendants or linked modules. can not reload),但问题本身及其答案并不是特别相关。
答案 0 :(得分:1)
这有时是由从项目(或图库)中的另一个表单继承的表单引起的(在文档IIRC中称为Visual Form Inheritance)。 IDE不知道如何找到表单的基类;它需要在后代形式之前打开。例如,如果在IDE中首先打开包含TMyBaseForm
的单元,则会导致相同的错误,特别是如果基础(祖先)单元未首先包含在项目中:
unit SpecialForm;
interface
uses
Forms, { all the other usual stuff }, BaseForm;
type
TMySpecialForm = class(TMyBaseForm)
private
public
end;
您可以通过查看表单的类声明来判断是否是这种情况 - 如果它来自TForm
之外的其他任何内容,则可能是错误的原因。
(它发生的另一个例子通常是在使用数据模块时,因为基础TDataModule
.DFM不可用。尝试将数据模块.DFM作为文本查看每次都会导致此错误;解决方案是关闭项目并使用外部编辑器(如Notepad或Notepad ++)编辑数据模块的.dfm。)
答案 1 :(得分:1)
我偶尔会遇到这个问题,也许当我使用Frames时,但是我的最新实例不涉及Frames,Data Modules或继承的表单。
经过大量工作,创建了表格的副本(该副本没有问题),并重命名了原始单元和表格本身(最初似乎解决了问题),结果证明是表单之间的实时绑定。
具体来说,在我的FMX应用程序中,表单A的选项页带有TSpinBox,允许用户设置表单B上的TTrackBar的最小值(这是给我带来痛苦的表单)。因此,通过实时绑定将TSpinBox.Value设置为更新TTrackBar.Min字段。关闭表格A或删除该实时绑定(并用事件处理程序替换它以执行相同的操作)解决了该问题。
答案 2 :(得分:1)
我想请Phillip J. Rayment和ADD回答,您不必进行实时绑定即可发生此问题。拥有自定义控件(类)就足够了,您可以在其中以另一种形式创建实例。然后,RLink32问题可能会出现,并且只有在您关闭实例所在的表单后才能解决。我遇到的问题给出了以下消息:
-RLink32 (during building)
-模块designide160.bpl`中的访问冲突(如果我对有问题的表单进行了修改)
-该模块具有开放的后代或链接的模块”错误(如果我尝试“以表格形式查看”)