怎样在程序中遍历某form有caption的控件,并将这些有caption的控件的caption加入到listbox1里面?(这些控件包括有label、button、checkbox等等,不包括edit等)
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
begin
  for i := 0 to ComponentCount - 1 do
  begin
    if Components[i] is TLabel then
      listbox1.Items.Add((Components[i] as TLabel).Caption);
    if Components[i] is Tbutton then
      listbox1.Items.Add((Components[i] as Tbutton).Caption);
  end;
end;
这段代码是分开一种一种的控件来添加,能否一次性添加,不用分哪种控件?

解决方案 »

  1.   

    Caption属性是在TControl类里定义的,不过是一个protected属性
    其它控件继承TControl,需要的时候才将它发布。用GetWindowText试试
      

  2.   

    implementation
    uses TypInfo;
    {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
      propinfo: PPropInfo;
    var
      i: Integer;
    begin
      for i := 0 to ComponentCount - 1 do
      begin
        PropInfo := GetPropInfo(Components[i].ClassInfo, 'Caption');
        if propinfo <> nil then
          listbox1.Items.Add(GetStrProp(Components[i], 'Caption'));
      end;
    end;
      

  3.   

    Caption属性其实Control上就有了,就是protected而已。type
      TMyControl = class(TControl)
      end;procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 0 to ControlCount - 1 do
         listbox1.Items.Add(TMyControl(Controls[i]).Caption);
    end;
      

  4.   

    我是想这样,有taborder的控件,按照taborder的顺序添加,可以吗?(当然这些有taborder的控件是有caption),我改变了它们的taborder,但是它们添加的顺序也和刚才一样。label可以放在最前面或者最后面
      

  5.   

    taborder的属性也可以按照类似上面的方法取到啊
      

  6.   

    我是想显示的是caption,按taborder排序
      

  7.   

    取到order,自己做个排序就好了