2010-03-07 65 views

回答

0

如果我得到正确的你在做什么,

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; 
+0

超级!几乎没有修改,我设法做我想做的事:) Greate工作 – gedO 2010-03-07 22:40:10

+0

伙计们帮助我。当我只使用一个TabSheet时,一切都很顺利,但是当我使用更多的时候,会给出错误“List index outbound of bounds(1)”。任何想法的方式? – gedO 2010-03-08 06:20:34

+0

列表索引错误可能是因为您访问带有无效索引的Pages或Controls集合。像上面的Sergs例子一样循环控制。循环浏览这样的页面: for I:= 0 to PageControl1.PageCount - 1 do begin (PageControl1.Pages [I] .Controls [0] as TForm2).Memo1.Lines.Add('text'); 结束; – 2010-03-08 07:06:02

3

你可以做这样的事情:

(PageControl1.Pages[0].Controls[0] as TForm2).Memo1.Lines.Add('text'); 
+0

你能写工作示例? – gedO 2010-03-07 22:04:18

0

我看到一个很大的问题与此代码 - Memo2将会有完全相同与Memo1相同的值,因为在搜索循环中没有区别。此外,如果此代码已完成,那么除了页面上的表单外,没有任何搜索循环的理由。

VilleK的答案应该编译并运行,我不明白你在问什么。

+0

我想你的意思是把你的第一段作为对Serg答案的评论,而第二段作为对Ville答案的评论。这两段都不是这个问题的答案。 – 2010-03-08 09:21:27

0

所以,我在你的帮助下解决了我的问题。这是我的代码:

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; 

希望这有助于别人

相关问题