将TForm分配给要在其他单元中使用的变量Delphi

时间:2019-06-21 17:49:08

标签: delphi delphi-xe6

我有一个具有三种形式的应用程序(一种用于电话,平板电脑和台式机),它们都具有相同的组件,并且每种形式的所有组件都具有相同的名称。应用程序启动时,仅根据屏幕解决方案创建一种表单。

然后我有一个从表单单元调用的单元,我需要在调用表单/单元上显示结果

现在我必须这样做:

If assigned(mobileform1) do
   mobileform1.Memo1.Text := MyText
else if assigned(mobileform2) do
   mobileform1.Memo1.Text := MyText
else if assigned(desktopform) do
   mobileform1.Memo1.Text := MyText;

有没有一种方法可以将创建的表单分配给一个变量,并且只有一行?

CreatedForm.Memo1.Text := MyText;

我试图将其分配给TForm变量,但是我无法使用它,或者我不知道如何。

谢谢, 寻求帮助。

1 个答案:

答案 0 :(得分:1)

根据评论,解决问题的正确方法是使用基本表单

同时,这应该可以为您快速解决问题:

pip

为什么引用 (CreatedForm . FindComponent ( 'Memo1' ) as tMemo) . Text := 'I love peanut butter sandwiches.'; 不起作用?考虑以下代码:

CreatedForm.Memo1

我们首先定义一个基类type tMyBaseClass = class X : double; end; tClassA = class ( tMyBaseClass ) Y : integer; Z : string; end; tClassB = class ( tMyBaseClass ) Y : array[1..100]of integer; Z : string; end; var J : tClassA; K : tMyBaseClass; begin J := tClassA . Create; J . X := 3.14; J . Y := 4; J . Z := 'Hello'; K := J; K . X := 2.71828; K . Y := 7; // Does not compile K . Z := 'There'; // Does not compile ,然后定义两个分别来自tMyBaseClasstMyBaseClasstClassA的类类型。 tClassB被声明为类型J。编译器知道tClassA引用了J对象的实例,因此您可以访问tClassAJ.XJ.Y。但是J.Z的类型为K。您可以引用tMyBaseClass,因为它是在基类中定义的,但是您不能访问K.XK.Y,因为它们是K.Z的字段,并且编译器可以不知道tClassA是指K的实例。

这基本上就是代码中所发生的事情。基类为tClassA,并且您已经定义了tFormtMobileForm的类,它们都是从tDesktopForm派生的。每个表格都有一个名为tForm的字段。您拥有Memo1类型的CreatedForm。您无法访问tForm,因为CreatedForm.Memo1类没有名为tForm的字段。

一种解决方案是将Memo1字段移到基类中。这样您就可以

Memo1

如果然后声明type tSharedForm = class ( tForm ) Memo1 : tMemo; end; tDesktopForm = class ( tSharedForm ) SomeOtherControl : tPanel; end; tMobileForm = class ( tSharedForm ) SomeOtherControl : tComboBox; end; CreatedForm类型,则可以访问tSharedForm,因为它现在位于基类中。

基本表单将为您执行此操作。