【问题标题】:How to merge two form classes at designtime?如何在设计时合并两个表单类?
【发布时间】:2020-07-01 07:39:36
【问题描述】:

我有几个表单类的继承级别,我想合并其中的两个。

TMyFormA = class(TForm)
  // X
end;

TMyFormB = class(TMyFormA)
  // Y
end;

我需要将TMyFormATMyFormB 合并到一个独特的类中,以便拥有一个TMyFormMerged 类型,其中包括来自TMyFormATMyFormB 的所有内容(字段、视觉组件、事件.. ..)。

TMyFormMerged = class(TForm)
  // X
  // Y
end;

是否有自动嵌入功能或任何其他可以帮助做到这一点的东西?

【问题讨论】:

  • 是的,有嵌入式功能。 Ctrl+C 然后 Ctrl +V
  • 如果这适用于 A -> B,那么最好使用 Ctrl-X 和 Ctrl-V 作为组件。否则,您将在表单 B 中以需要不同名称的双组件结束。
  • 通用组件我可以这样做,但我也有 DevExpress TdxRibbon 有很多项目,不允许 Ctrl+C/Ctrl+X 和 Ctrl+V
  • 如果您不能直接复制粘贴组件,那么将表单作为文本打开并复制该文本就可以解决问题(通常)。如果我没记错的话,继承的控件将在 dfm 中标记为继承而不是对象,因此您需要更改它。
  • 对不起,你修改后的 q 比以前更不清晰了。如果 TFormA 具有 X 并且 TFormB 从 TFormA 下降并添加 X,则 TFormB 已经 具有 X 和 Y 那么究竟您期望“合并”以实现这一点有什么不同?

标签: delphi


【解决方案1】:

您可以选择任何现有表单作为新表单的基类(即直接祖先), 这将遵循通常的继承规则,包括其所有组件等。尝试 这个:

  • 打开一个包含 FormA 的项目

  • 转到文件 |新 |其他,然后在 Inheritable Items 下选择 FormA

  • Delphi 将创建一个新的 FormA2,您可以将其重命名为 FormB。显然,如果您现有的 FromB 有自己的任何组件,您可以将它们复制到 FormA2 并重新建立任何特定于 FormB 的事件处理程序。

【讨论】:

  • 这样做将创建当前TMyFormB类的精确克隆,这不是我需要的(我已经有TMyFormB继承自TMyFormA,但我需要将它们合并到一个独特的类)。我已经更新了这个问题,试图更清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多