【问题标题】:Get all child elements of Tpagecontrols获取Tpagecontrols的所有子元素
【发布时间】:2015-11-28 12:46:58
【问题描述】:

我的表单上有一个页面控件。此页面控件有两个或三个选项卡。每个选项卡都有一些其他控件,例如按钮、标签面板等。我能够找到所有控件,但如果某些控件位于面板顶部,则我无法找到该控件

我的代码:

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

【问题讨论】:

    标签: delphi


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2014-09-07
      • 2019-07-10
      • 1970-01-01
      • 2013-09-11
      • 2014-10-08
      • 2021-12-25
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      相关资源
      最近更新 更多