var  mybtn: array of tbutton;
begin
  for i=1 to 10 do  mybtn(i).create(self);
  mybtn(1).caption:='a';
  mybtn(2).caption:='b';
   .........
  for i=1 to 10 do mybtn(i).free;
end;

解决方案 »

  1.   

    方法如下:建立一组数组按钮var arrBtn : array of TButton;procedure setArrBtn();
    var i:integer;
    begin
      SetLength(arrBtn, 10);
      
      for i:=0 to 9 do begin
          arrBtn[i] := TButton.Create(self);
          arrBtn[i].Caption := 'button' + IntToStr(i);
          arrBtn[i].width := 100;
          //.....设置其它属性
          
          arrBtn[i].tag := i;  //标识控件标志,以便在以后的事件处理函数中识别该控件。
          arrBtn[i].OnClick := OnMyButton;
      end;
    end;//自定义的事件响应过程OnMyButton
    procedure OnMyButton(Sender: TObject);
    begin
      //根据上面设置的tag值来判断按下的是哪个动态生成的控件  case TButton(Sender).tag of
        1 : begin
              //数组按钮1触发的事件
            end;
        2 : begin
            //数组按钮2触发的事件
            end;  
        3 ://.......................    else.................. 
      end;end; 
      

  2.   

    to mrkjoyce(mirik_joyce) 指正一个错误
    你的动态数组还没有定义长度怎么可以直接对其中的对象Create呢?
      

  3.   

    for i := 0 to Self.ComponentCount-1 do begin
      if (Self.Components[i].classType = TSpeedButton) then
        TSpeedButton(Self.Components[i]).Caption ;= ...
    end;//for
      

  4.   

    同意 Crob(干净的袜子) ,mrkjoyce(mirik_joyce) 是没有定义长度
      

  5.   

    stringlist就是比数组还要灵活的东东