Как я могу получить доступ к элементам управления формы, встроенной в элемент управления страницы?
В Form1 у меня есть PageControl. Во время выполнения моя программа создает вкладки. В каждом TabSheet я создаю Form2. В Form2 у меня есть компонент Memo1. Как я могу добавить текст в Memo1?
4 ответа
Решение
Если я правильно понял, что ты делаешь,
procedure TForm1.Button1Click(Sender: TObject);
var
View: TForm;
Memo1, Memo2: TMemo;
Page: TTabSheet;
I: Integer;
begin
View:= TForm2.Create(Form1);
View.Parent:= PageControl1.Pages[0];
View.Visible:= True;
View:= TForm2.Create(Form1);
View.Parent:= PageControl1.Pages[1];
View.Visible:= True;
// find the first memo:
Page:= PageControl1.Pages[0];
Memo1:= nil;
for I:= 0 to Page.ControlCount - 1 do begin
if Page.Controls[I] is TForm2 then begin
Memo1:= TForm2(Page.Controls[I]).Memo1;
Break;
end;
end;
Page:= PageControl1.Pages[1];
// find the second memo:
Memo2:= nil;
for I:= 0 to Page.ControlCount - 1 do begin
if Page.Controls[I] is TForm2 then begin
Memo2:= TForm2(Page.Controls[I]).Memo1;
Break;
end;
end;
if Assigned(Memo1) then Memo1.Lines.Add('First Memo');
if Assigned(Memo2) then Memo2.Lines.Add('Second Memo');
end;
Вы могли бы сделать что-то вроде этого:
(PageControl1.Pages[0].Controls[0] as TForm2).Memo1.Lines.Add('text');
Итак, я решил мою проблему с вашей помощью. Это мой код:
var
ID, I: integer;
Tekstas: string;
View: TForm2;
Memo: TMemo;
Page: TTabSheet;
begin
...
Page := PageControl.Pages[ID];
for i := 0 to Page.ControlCount - 1 do
begin
(PageControl.Pages[ID].Controls[0] as TKomp_Forma).Memo.Lines.Add('['+TimeToStr(Time)+']'+Duom[ID].Vardas+': '+Tekstas);
end;
end;
Надеюсь, это поможет кому-то еще
Я вижу одну большую проблему с этим кодом -Memo2 будет иметь точно такое же значение, как Memo1, так как нет разницы в циклах поиска. Кроме того, если этот код завершен, то на странице ничего нет, кроме формы, и вообще нет причин для цикла поиска.
Ответ VilleK должен быть скомпилирован и запущен, я не понимаю, о чем вы просите.