想问下关于self.component和如groupbox1.Controls的在遍历控件时相同与不同之处。
顺便还想再问下遍历不同控件时的顺序。比如form中有edit,label,checkbox,radiobutton等等的组建,我遍历它们时的顺序是?procedure TForm1.FormCreate(Sender: TObject);
var
   i : integer;
begin
   for i := 0 to self.ComponentCount - 1 do
       begin
          if self.Components[i] is Tedit then
             begin
                self.ListBox1.Items.Add(Tedit(self.Components[i]).Name);
                self.ListBox2.Items.Add(IntToStr(i));
             end;
          if self.Components[i] is TSpeedButton then
             begin
                self.ListBox1.Items.Add(TSpeedButton(self.Components[i]).Name);
                self.ListBox2.Items.Add(IntToStr(i));
             end;
          if self.Components[i] is Tbutton then
             begin
                self.ListBox1.Items.Add(Tbutton(self.Components[i]).Name);
                self.ListBox2.Items.Add(IntToStr(i));
             end;
          if self.Components[i] is Tradiobutton then
             begin
                self.ListBox1.Items.Add(Tradiobutton(self.Components[i]).Name);
                self.ListBox2.Items.Add(IntToStr(i));
             end;
          if self.Components[i] is Tcheckbox then
             begin
                self.ListBox1.Items.Add(Tcheckbox(self.Components[i]).Name);
                self.ListBox2.Items.Add(IntToStr(i));
             end;
       end;end;

解决方案 »

  1.   

    Components: Lists all components owned by the component.就是所有的owner是自己的控件
    Controls:Lists all child controls. 所有的parent是自己的控件比如你在panel上放一个button,那么button的owner是窗体,button属于窗体的components,不属于panel的components,但是属于panel的controls。
      

  2.   

    Owner 是管理所属控件的内存资源 释放的,也就是compoents  如果 控件创建时   S:=TBUTTON.CREATE(Panel) 那么当panel.free时 S就会free,  当然s就是panel上的一个compoent如果 s.parent:=Panel的话 只是s的绘制相关受控于Panel 也就是controls    当Panel.free时 如果owner不是panel 则s不会释放。  当然s 为controls时必须继承自TControls