2015-11-28 99 views
2

我的窗體上有一個頁面控件。該頁面控件有兩個或三個選項卡。每個標籤有一個像按鈕,標籤面板等我能找到的所有控制,但如果一些控制坐落在面板頂部,那麼我無法找到控制幾個其他控件獲取Tpagecontrols的所有子元素

我的代碼:

for I := 0 to Pagecontrol.Pagecount -1 do 
begin 
    for J := 0 to pagecontrol.pages[i].controlcount - 1 do 
    showmessage(pagecontrol.pages[i].controls[J].name) // not able to find button whose parent is panel 
end 

,當我做

for J := 0 to pagecontrol.pages[i].componentscount- 1 do // it does not enter into loop 

回答

3

Controls[]屬性列表直接子項。您需要深入瞭解孩子的孩子等等。通常是這樣完成遞歸:

procedure WalkChildren(Parent: TWinControl; Visit: TProc<TControl>); 
var 
    i: Integer;  
    Child: TControl; 
begin 
    for i := 0 to Parent.ControlCount-1 do 
    begin 
    Child := Parent.Controls[i]; 
    Visit(Child); 
    if Child is TWinControl then 
     WalkChildren(TWinControl(Child), Visit); 
    end; 
end; 

您可以將此像這樣:

for i := 0 to PageControl1.PageCount-1 do 
    WalkChildren(
    PageControl1.Pages[i], 
    procedure(Child: TControl) 
    begin 
     Memo1.Lines.Add(Child.Name); 
    end 
); 

甚至:

WalkChildren(
    PageControl1, 
    procedure(Child: TControl) 
    begin 
    Memo1.Lines.Add(Child.Name); 
    end 
相關問題