【问题标题】:error while creating form in delphi在delphi中创建表单时出错
【发布时间】:2012-08-07 22:36:04
【问题描述】:

您好,我有使用 100 多种表格的 delphi 应用程序。有一种表格叫表格 B,它是从表格 A 派生的。

Unit B 

interace

uses A;

Type
Form B = Class(Form A)

End;

现在,当我尝试在 IDE 上打开 Form B 时,我收到错误消息“错误创建表单:未找到 TFormA 的祖先”。但是当我打开表格 A 然后尝试表格 B 时,我可以打开表格而不会出现任何错误。 我无法找到它发生的原因。我错过了什么吗?

【问题讨论】:

  • 你是用IDE从FormA继承FormB,还是手动做的?
  • 所以您正在使用表单继承。要记住两个项目。 dfm文件需要声明“inherited TFormB”而不是“object TFormB” 另一项是Delphi需要知道TFormA在哪里才能创建TFormB。我已经有一段时间没有这样做了,如果我没记错的话,将基本表单添加到存储库时效果会更好。
  • @serg:不只是手动完成的。
  • @GDF:是的,我正在使用继承
  • 既然您指出您是手动完成的,请确保您打开了两个表单。然后将 TFormB 视为文本,并将其更改为继承,就像我在第一条评论中描述的那样。将 2 cmets 包装成一个答案帖

标签: delphi delphi-5


【解决方案1】:

使用表单继承时要记住两点。 dfm文件需要声明“inherited TFormB”而不是“object TFormB” 另一项是Delphi需要知道TFormA在哪里才能创建TFormB。我已经有一段时间没有这样做了,如果我没记错的话,将基本表单添加到存储库时效果会更好

既然您指出您是手动执行的,请确保 dfm 中的声明使用的是“继承”一词,而不是我上面描述的“对象”。要自己进行更改,请执行以下操作

1) 打开两个表单。 2)然后将TFormB视为文本 3) 如下所述将其更改为继承

    inherited FormB: TFormB
      Caption = 'FormB'
      PixelsPerInch = 96
      TextHeight = 13
    end

// not

    object FormB: TFormB
      Caption = 'FormB'
      PixelsPerInch = 96
      TextHeight = 13
    end

【讨论】:

  • 完成更改并保存并尝试打开表单但仍然存在同样的问题。 :(
  • ...好吧,我知道您需要上述声明才能使表单继承正常工作...而且我知道 IDE 需要了解祖先,并在加载之前加载它后代...我对下一步该做什么有点不知所措。您可能只需要重命名您的表单,尝试使用 IDE 创建一个新的继承表单,然后复制您的组件和代码。IDE 表单继承机制应该可以完成您可能缺少的内容。我会备份我的工作并在接下来尝试,看看它是否解决了问题。
  • @Naren - 你的项目文件是否包含unit in 'unit.pas' {FormA}?
【解决方案2】:

您应该使用 Delphi IDE 提供的可视化表单继承;我没有 Delphi 5,在 Delphi XE 中通过 File->New->Other...->Inheritable Items 访问它。我确信它在 Delphi 5 中也可用,但可能来自不同的菜单项

【讨论】:

  • 在 Delphi 7 例如it's on a tab 工作表命名为当前项目。
【解决方案3】:

尽管 DFM 文件中的所有内容都“继承”了,但我遇到了同样的问题。

解决我的问题是通过在项目管理器中右键单击来将祖先文件添加到项目中 -> 添加并选择祖先文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-19
    • 2013-05-05
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多