var
    i:  integer;
begin
for I := 1 to ComponentCount do
 TButton(FindComponent('Button'+IntToStr(I))).Caption:=IntToStr(I);
end;
这样编历是有些浪费,但是我觉得别无选择。

解决方案 »

  1.   

    for i := 0 to ComponentCount-1 do 
    begin
      if Components[i] is TLabel then begin
         s := (Components[i] as TLabel).Name; 
         //.....
       end;end;
      

  2.   

    netlib(河外孤星):你的方法我也用过,但总觉得有点什么的,并加了个数组在FormCreate进行初始化处理各类控件,但还是觉得不理想。另外有没有办法在设计期对Index进行调整的办法?就是在不改动画面的情况下调整Index.
      

  3.   

    netlib(河外孤星):你的方法我也用过,但总觉得有点什么的,并加了个数组在FormCreate进行初始化处理各类控件,但还是觉得不理想。另外有没有办法在设计期对Index进行调整?就是在不改动画面的情况下调整Index.
      

  4.   

    netlib(河外孤星):你的方法我也用过,但总觉得有点什么的,并加了个数组在FormCreate进行初始化处理各类控件,但还是觉得不理想。另外有没有办法在设计期对Index进行调整?就是在不改动画面的情况下调整Index.
      

  5.   

    变量宏我只在VF中看见过
    TLabel(FindComponent(Format('Label%d' ,[I]))).Caption := '有什么不好?';//设计期对Index次序的调整
    //就是对层次的调整
      

  6.   

    zswang(伴水) ,就是原为编译语言没有宏变量才有这麻烦。
    FindComponent对一般的程序是没问题了,但对数控类时间精度较高的程序在使用元件很多时不理想。最好是不用查询,能直接引用Index。//设计期对Index次序的调整
    //就是对层次的调整这句是不是说Bring to front or Send to back有效?
      

  7.   

    那就一次性取到所有控件的Index你可以自己测试测试看看
    ShowMessage(IntToStr(Button1.ComponentIndex));
    ShowMessage(IntToStr(Button2.ComponentIndex));除了Bring ... ... 还可以直接修改窗体代码object Button1: TButton1
      Caption = 'Button1'
    //... ...
    end
    object Button2: TButton2
      Caption = 'Button2'
    //... ...
    end------------------>>>>>>>>>>>>object Button2: TButton2
      Caption = 'Button2'
    //... ...
    end
    object Button1: TButton1
      Caption = 'Button1'
    //... ...
    end