我 在一个输入框中输入一个数字n就动态的创建n个edit  可是当我第2次输入一个数字的时候应该是先删除原来的edit,而不是继续创建。请问我如何动态删除原来的那n个edit。

解决方案 »

  1.   

    for i:= 1 to n do
    begin
      Editn.Free
    end;
      

  2.   

    我菜,错了,不好意思,如果n个edit是以数组形式创建的话,应该是:
    for i:= 1 to n do
    begin
      Edit[n].Free;
    end;如果不是,只能一个一个释放:Edit1.Free;
    Edit2.Free;
    .
    .
    .
    .
      

  3.   

    for I:=0 to N-1 do 
      (Self.FindComponent('Edit'+IntToStr(I)) as TEdit).Free;也可以用FreeAndNil,不过很少用,呵呵!
      

  4.   

    for I:=0 to N-1 do 
      (Self.FindComponent('Edit'+IntToStr(I)) as TEdit).Free;呵呵,这里释放好象一般不用FreeAndNil啊,HOHO!
      

  5.   

    呵呵~!各位对我来说都是大师  呵呵!~我一个个试试看~!希望还有更好的办法。
    我的代码是这样的
    procedure Tfrmxjgl_cbxh_zdbh.Button1Click(Sender: TObject);
    var
     edit:Tedit;
     i:integer;
    begin
    i:=0;
    if edit1.Text='' then
      showmessage('请输入学号位数')
      else
       begin
        while i<>strtoint(edit1.Text) do
           begin
                 i:=i+1;
                 n:=n+32;
                 Edit:= TEdit.Create(self);
                 Edit.Parent := self;
                 Edit.Width:=25;
                 Edit.left := n;
                 Edit.Top := 64;
                 Edit.visible := true;
                 Edit.Enabled := true;
                 edit.MaxLength:=1;
                 Edit.SetFocus;
            end;
       end;
    end;
     我想在下次点击的时候删除已经创建的edit 并创建新的edit 该如何修改此代码?
      

  6.   

    procedure TForm1.Button2Click(Sender: TObject);
    var i,j : integer ;
    begin
     for i :=  ControlCount -1 downto 0 do
     begin
       if ((Components[i] is TEdit) and
           //保留固定控件
           (TEdit(Components[i]).Name <> 'Edit1') ) then
       begin
         TEdit(Components[i]).Free ;
       end ;
     end ;
    end;
      

  7.   

    另外junwq(中国→龙) 在里的单元内加一个私有变量Nums,初始值为1,记录控件数。然后将你指定的控件赋于名称:
    procedure Tfrmxjgl_cbxh_zdbh.Button1Click(Sender: TObject);
    var
     edit:Tedit;
     i:integer;
    begin
    i:=0;
    if edit1.Text='' then
      showmessage('请输入学号位数')
      else
       begin
       
        for j :=  ControlCount -1 downto 0 do
     begin
       if ((Components[j] is TEdit) and
           //保留固定控件
           (TEdit(Components[j]).Name <> 'Edit1') ) then
       begin
         TEdit(Components[j]).Free ;
       end ;
     end ;    while i<>strtoint(edit1.Text) do
           begin
                 i:=i+1;
                 Nums := Nums + 1 ;
                 n:=n+32;
                 Edit:= TEdit.Create(self);
                 Edit.Parent := self;
                 Edit.Name := 'Edit'+IntToStr(Nums) ;
                 Edit.Width:=25;
                 Edit.left := n;
                 Edit.Top := 64;
                 Edit.visible := true;
                 Edit.Enabled := true;
                 edit.MaxLength:=1;
                 Edit.SetFocus;
            end;
       end;
    end;
      

  8.   

    小生谢谢:Manwill71(天皇地虎江山一片) 
        谢谢:mib3000(黑仔) 
        谢谢:FrameSniper(§绕瀑游龙§) ( )
      

  9.   

    先创建一个list: TList保存edit;procedure Tfrmxjgl_cbxh_zdbh.Button1Click(Sender: TObject);
    var
     edit:Tedit;
     i:integer;
    begin
    i:=0;
    if edit1.Text='' then
      showmessage('请输入学号位数')
      else
       begin
        while i<>strtoint(edit1.Text) do
           begin
                 i:=i+1;
                 n:=n+32;
                 Edit:= TEdit.Create(self);
                 Edit.Parent := self;
                 Edit.Width:=25;
                 Edit.left := n;
                 Edit.Top := 64;
                 Edit.visible := true;
                 Edit.Enabled := true;
                 edit.MaxLength:=1;
                 Edit.SetFocus;
                 List.add(edit);
            end;
       end;
    end;//delete
    var 
      i: integer;
    begin
      if list.count > 0 then 
        for i:= 0 to List.count - 1 do
          TConTrol(List.items[i]).free;
      List.clear;
    end;
      

  10.   

    继续学习   fengjn(小枫)  方法
     继续请教  Manwill71(天皇地虎江山一片)  我使用你的方法后要如何去取各个edit.text呢?
     既 'Edit'+IntToStr(Nums) 中的值怎么获得?
      

  11.   

    看你的要取的是哪一个值。 比如你创建了三个EDIT,各自命为依次累加,那么,你直接算取就是了。
    因为系统会根据你创建的顺序进行得取。
    比如你将所有的值加在一起,可以这样做:
    procedure TForm1.Button2Click(Sender: TObject);
    var i : integer ;
    begin
     for i :=  ControlCount -1 downto 0 do
     begin
       if ((Components[i] is TEdit) and
           //保留固定控件
           (TEdit(Components[i]).Name <> 'Edit1') ) then
       begin
         Label1.Caption := Label1.Caption+ TEdit(Components[i]).Text  ;
       end ;
     end ;
    end;
    所得的值根据你相关的顺序取得