我自己用动态数组写了控件但是有问题,我找不出,怎样才能正确创建动态的控件,
包括怎样删除掉所创建的控件?procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i,d,j:integer;
  editm:array of tedit;
begin
d:=0;
j:=strtoint(num.text);
setlength(editm,j);
for i:=1 to j do
begin
  editm[i]:=tedit.Create(self);
  editm[i].Parent:=ScrollBox1;
  editm[i].Width:=120;
  editm[i].Height:=20;
  editm[i].Left:=0;
  editm[i].Top:=0+d;
  editm[i].Name:='edit'+inttostr(i);
  editm[i].Text:='edit'+inttostr(i);
  editm[i].Visible:=true;
  d:=d+20;
  end;
end;

解决方案 »

  1.   

    var
      edt : TEdit;
    begin
      edt := TEdit.Create(self);//也可直接写创建在某个控件上比如Form1.Panel1
      with edt do
      begin
        Caption := '确定';
        Parent := Form1;
      end;
    end;
    要创建多个的话用循环就可以了!
    释放不需要手工,会自动释放的!
    //不需要自己释放,当
      

  2.   

    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      i,d,j:integer;
      editm:tedit;
    begin
    d:=0;
    j:=strtoint(num.text);
    for i:=1 to j do
    begin
      editm :=tedit.Create(self);
      with editm do
      begin
        editm.Parent:=ScrollBox1;
        editm.Width:=120;
        editm.Height:=20;
        editm.Left:=0;
        editm.Top:=0+d;
        editm.Name:='edit'+inttostr(i);
        editm.Text:='edit'+inttostr(i);
        editm.Visible:=true;
        d:=d+20;
      end;
    end;
      

  3.   

    editm[i].Parent:=ScrollBox1;
    改为
    editm[i].Parent:=Form1;
    试试看
      

  4.   

    var
      Edit1: TEdit;
    begin
      Edit1 := TEdit.Create(self);
      Edit1.Parent := Form1;
      Edit1.Visible := True;
      Edit1.Height := 20;
      Edit1.Top := 296;
      Edit1.Width := 121;
      Edit1.Left :=  56;
      Edit1.Text := 'Edit1';
    end;
      

  5.   

    呵呵,兄弟我调了好久默然回首,发现你的数组越界了!!!:)!
    你的程序都是对的,不过循环语句应该是:for i:=0 to j-1;
    呵呵,动态数组不支持更改下标的!!!!!你要删除就用:
    for i:=0 to j-1 do 
    begin
    editm[i].free;
    end;
      

  6.   

    var
      edt : TEdit;
    begin
      edt := TEdit.Create(self);//