用组件数组啊。
声明一个数组:比如Exam:Array of TLabel
然后用SetLength(Exam,n)分配个数。
Exam[i]:=TLabel.Create(self)用Exam[i]就是你创建的那个控件 
Exam[i].属性就行。

解决方案 »

  1.   

    动态创建的控件的属性缺省值与设计时加入到窗体里的规律是一样的,如TLabel.Create(self)第一次创建时它的name是label1。(如果窗体上没有叫这个名字的)你也可以在创建完成之后,付给它一个你可以方便操作的名字。(其它属性也可以)
      

  2.   

    to:all
       我的意思是把动态创建的控件的name作为click过程的参数如何传递给click的过程代码.
      
      

  3.   

    在OnClick事件中传递的是一个对象类即TObject,
    在动态创建的控中不能用它的Name属性来引用它,应该用数组元素或是链表节点来引用
      

  4.   

    更为详细点,下面列出数组的定义:
      WinControlArray=array of TObject;  //这里可以用TWinControl,如果生成的控件是某一类的话;
    var
      CtrArray:WinControlArray;每创建一个控件,需要执行如下代码]
      SetLength(CtrArray,<此处为数组长度>);
      CtrArray[数组下标]:=TButton.Create(Self);
      TButton(CtrArray[数组下标]).Parent:=Self;
      TButton(CtrArray[数组下标]).OnClick:=Self.Button1Click;
    其中Self.Button1Click为预先编好的事件处理代码.
      

  5.   

    在窗体单元源码中添加如下代码:
    procedure TForm1.Button1.Click(Sender:TObject);
    begin
      ShowMessage('hello');
    end;
    你就可以看看运行效果了
      

  6.   

    to :somethine
      谢谢你的答复.但是你说的还是没有突破我的目的,我创建了一控件数组,在给他们定义click事件中,我必须考虑到我是按了他们中的那一个,以便我根据他们的name或下标的不同调用不同的程序,因此关键是如何知道我按下了动态创建了控件数组中的那一个而不是显示一下'hello',要的是知道单击了谁.
      

  7.   

    procedure TForm1.Button1Click(Sender:TObject);
    var
      ArrButton: Array[0..5] of TButton;
      i: integer;
    begin
      for i:=0 to 5 do
      begin
        ArrButton[i] := TButton.Create(Self);
        Self.InsertControl(ArrButton[i]);
        ArrButton[i].Top :=100;  ArrButton[i].Left := i*100;
        ArrButton[i].Tag := i;
        ArrButton[i].Name := 'Button'+IntToStr(i);
        ArrButton[i].OnClick := onButtonClick;
      end;
    end;procedure TForm1.onButtonClick(Sender:TObject);
    begin
      ShowMessage(TButton(Sender).Name); 
      case i of
       0:
       ……
      end;
    end;
      

  8.   

      case TButton(Sender).Tag of
      

  9.   

    to all:
       thank you.