我有一个具有三种形式的应用程序(一种用于电话,平板电脑和台式机),它们都具有相同的组件,并且每种形式的所有组件都具有相同的名称。应用程序启动时,仅根据屏幕解决方案创建一种表单。
然后我有一个从表单单元调用的单元,我需要在调用表单/单元上显示结果
现在我必须这样做:
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变量,但是我无法使用它,或者我不知道如何。
谢谢, 寻求帮助。
答案 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
,然后定义两个分别来自tMyBaseClass
,tMyBaseClass
和tClassA
的类类型。
tClassB
被声明为类型J
。编译器知道tClassA
引用了J
对象的实例,因此您可以访问tClassA
,J.X
和J.Y
。但是J.Z
的类型为K
。您可以引用tMyBaseClass
,因为它是在基类中定义的,但是您不能访问K.X
或K.Y
,因为它们是K.Z
的字段,并且编译器可以不知道tClassA
是指K
的实例。
这基本上就是代码中所发生的事情。基类为tClassA
,并且您已经定义了tForm
和tMobileForm
的类,它们都是从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
,因为它现在位于基类中。
基本表单将为您执行此操作。