我菜,错了,不好意思,如果n个edit是以数组形式创建的话,应该是: for i:= 1 to n do begin Edit[n].Free; end;如果不是,只能一个一个释放:Edit1.Free; Edit2.Free; . . . .
for I:=0 to N-1 do (Self.FindComponent('Edit'+IntToStr(I)) as TEdit).Free;也可以用FreeAndNil,不过很少用,呵呵!
for I:=0 to N-1 do (Self.FindComponent('Edit'+IntToStr(I)) as TEdit).Free;呵呵,这里释放好象一般不用FreeAndNil啊,HOHO!
呵呵~!各位对我来说都是大师 呵呵!~我一个个试试看~!希望还有更好的办法。 我的代码是这样的 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 该如何修改此代码?
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;
另外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;
先创建一个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;
看你的要取的是哪一个值。 比如你创建了三个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; 所得的值根据你相关的顺序取得
begin
Editn.Free
end;
for i:= 1 to n do
begin
Edit[n].Free;
end;如果不是,只能一个一个释放:Edit1.Free;
Edit2.Free;
.
.
.
.
(Self.FindComponent('Edit'+IntToStr(I)) as TEdit).Free;也可以用FreeAndNil,不过很少用,呵呵!
(Self.FindComponent('Edit'+IntToStr(I)) as TEdit).Free;呵呵,这里释放好象一般不用FreeAndNil啊,HOHO!
我的代码是这样的
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 该如何修改此代码?
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;
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;
谢谢:mib3000(黑仔)
谢谢:FrameSniper(§绕瀑游龙§) ( )
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;
继续请教 Manwill71(天皇地虎江山一片) 我使用你的方法后要如何去取各个edit.text呢?
既 'Edit'+IntToStr(Nums) 中的值怎么获得?
因为系统会根据你创建的顺序进行得取。
比如你将所有的值加在一起,可以这样做:
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;
所得的值根据你相关的顺序取得