var
  txt:array [0..9] of Tedit;procedure TForm1.Button3Click(Sender: TObject);
var
  i:integer  ;
begin
  for i:= 0 to 9 do
  begin
    txt[i]:=Tedit.Create(form1); //创建
    txt[i].Parent := form1;   //父亲
    txt[i].Left := 11;
    txt[i].Top := i*20+5;
    txt[i].Visible := true;        //可见
  end;end;procedure TForm1.Button4Click(Sender: TObject);
var
  i:integer   ;
begin
  for i:= 0 to 9 do
  begin
    txt[i].free;     // 释放
    txt[i] := nil;     //指针
  end;end;

解决方案 »

  1.   

    type
      TMyType = (mtOne, mtTwo, mtThree);
      
    var
      Querys1: array [TMyType] of TQuery;  //定义定长度的控件数组。可以用Querys1[mtOne]直接访问。
      Querys2: array of TQuery;            //不定长的。Create;
    const
      QueryCount = 10;    //不定长的数量
    var
      I: Integer;
      MyType: TMyType;
    begin
      for I := Ord(mtOne) to Ord(mtThree) do
      begin
        MyType := TMyType(I);
        Querys1[MyType] := TQuery.Create(nil);
        Querys1[MyType].Property .... = ....
      end;
      //Querys2 Create
      Querys2 := varArrayCreate([0..QueryCount -1], varVariant];
      for I := 0 to QueryCount - 1 do
      begin
        Querys2[I] := TQuery.Create(nil);
        Querys2[I].Preperty ....= ...;
      end; 
    end;Create完了,使用简单了,
    Querys1:
    Querys1[mtOne].SQL.Add
    Querys1[mtTwo].SQL.Add
    ...
    Querys2:
    Querys2[0].SQL.Add(...)
    ....Free不用说了吧,用循环将各个Free
      

  2.   

    没什么了,快快给分。呵呵。
    再它的就不是数组控件了, 一些Item(TListView), 或Node(TTreeView),or TListBox.Items.AddObjects,中都有Data: Pointer属性,可以通过这个动态生成控件,加入到其中的Item中,用的时候可以转换一下,也是一个方法。
    (忽然发现Delphi的Pointer真是很好用):)