Согласно комментариям, правильное решение вашей проблемы - использовать базовую форму .
А пока это должно дать вам быстрое решение вашей проблемы:
(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
, то вы можете получить доступ к CreatedForm.Memo1
, поскольку он теперь находится в базовом классе.
Это то, что базовая форма сделает для вас.